gpt4 book ai didi

c# - 维护排序顺序的集合 C#

转载 作者:可可西里 更新时间:2023-11-01 08:26:52 27 4
gpt4 key购买 nike

我有一个类Foo其中包含对象列表:List<Bar> .每个Bar有一个可以订购它们的属性(类型为 TimeSpan ,代表持续时间)和 Bar是一个不可变的对象——也就是说,持续时间不会随着算法的运行而改变。目前,对于每个 Foo我还维护 Bar如果要订购它,它将在列表中排在第一位(即持续时间最短的 Bar)。像这样:

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);
}
}

本类(class)Foo用于处理性能(速度)至关重要的算法中。内存很重要,但不如速度重要。有一个列表 n Foo s,每个最多 m Bar秒。到目前为止,这门课对我很有帮助。我现在希望为用户提供多种选择,这意味着我需要提供对前几个 Bar 的随机访问。 s 在列表中。

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

最佳答案

我更喜欢使用 SortedSet<T> ,这是一个二叉树,其中键和值是同一个对象。这再次意味着添加/删除/查找是对数的 - O(log n) - 但你获得了按顺序迭代项目的能力。要使此集合生效,请键入 T必须实现 IComparable<T>或者您需要提供外部 IComparer<T> .

关于c# - 维护排序顺序的集合 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31589033/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com