维护排序顺序C#的集合

维护排序顺序C#的集合,第1张

概述我有一个类Foo,它包含一个对象列表:List< Bar>.每个栏都有一个可以在其上订购的属性(类型为TimeSpan,表示持续时间),而Bar是一个不可变的对象,即持续时间不会随着算法的运行而改变.目前,对于每个Foo,如果要订单(即最短持续时间的酒吧),我也会维持该列表中的第一名.这样的事情 public class Foo{ public List<Bar> AllBars { g 我有一个类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.

总结

以上是内存溢出为你收集整理的维护排序顺序C#的集合全部内容,希望文章能够帮你解决维护排序顺序C#的集合所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1237036.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存