维护排序顺序C#的集合

前端之家收集整理的这篇文章主要介绍了维护排序顺序C#的集合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个类Foo,它包含一个对象列表:List< Bar>.每个栏都有一个可以在其上订购的属性(类型为TimeSpan,表示持续时间),而Bar是一个不可变的对象,即持续时间不会随着算法的运行而改变.目前,对于每个Foo,如果要订单(即最短持续时间的酒吧),我也会维持该列表中的第一名.这样的事情
public class Foo
{
    public List<Bar> AllBars { get; set; }

    public Bar FirstBar { get; set; }

    public Foo (Bar bar)
    {
        FirstBar = bar;

        AllBars = new List<Bar>() { bar };
    }

    public AddBar(Bar bar)
    {
        if(bar.Duration < FirstBar.Duration)
        {
            FirstBar = bar;
        }

        AllBars.Add(bar);
    }
}

这个类Foo用于处理性能(速度)至关重要的算法中.记忆是重要的,但不如速度那么快.有一个n Foos的列表,每个都有m个酒吧.这个课程已经很好,直到这一点.我现在希望为用户提供几种选择,这意味着我需要随机访问列表中的前几个条.

因此,我想按顺序存储我的酒吧,以便我可以按索引访问它们.在我的Bar课程中,我实现了IComparable,允许在持续时间上比较Bars,但是我坚持选择适当的数据类型.我看着System.Collections.SortedList但是(除非我错了),因为它实现了IDictionary,这似乎是通过key来引用元素的.我可以使用什么集合来维护我的对象,使它们保持排序,并且它们可以按索引的顺序遍历?

解决方法

(根据asker的要求从评论中提拔)

如果你可以拥有“值”意味着什么,只需使用SortedList< Bar,对象>在那里你不使用价值部分.

在O(n)时间内添加yourSortedList.Add(yourBar,null)(该列表将必须在所插入的点之后移动“up”所有条目).使用yourSortedList.Keys [i]在O(1)时间内检索第i个条目.

参见SortedList<,>.Keys property documentation的一些“证明”,上面的描述是正确的.请注意,SortedList<,>实际上由“列表”(即,长度容量的阵列,需要时由更大的阵列代替)组成.这与SortedDictionary<,>不同我相信是一个二叉搜索树.

请注意:您将无法在SortedList<,&gt ;,中重复,因此列表中的两个成员不允许以返回值为零进行CompareTo.

原文链接:https://www.f2er.com/csharp/96918.html

猜你在找的C#相关文章