c# - 根据特定属性维护排序顺序的集合类?

标签 c# data-structures

我正在寻找一个集合类,它将根据属性(即“优先级”)自动按排序顺序插入元素,这样当我稍后对其进行迭代时,我将按此顺序取回元素。


SortedList似乎按键排序,这不是我想要的。

最佳答案

您可以使用 SortedSet<T> ,这是 .NET 4 中的新增功能。您可以在实现 IComparable<T> 的类上使用它。或者您可以通过构造函数重载提供外部比较器。示例:

class Foo
{
    public int Bar { get; set; }
}

class FooComparer : IComparer<Foo>
{
    public int Compare(Foo x, Foo y)
    {
        // add null checking, demo purposes only
        return x.Bar.CompareTo(y.Bar);
    }
}

...

SortedSet<Foo> sortedFoos = new SortedSet<Foo>(new FooComparer());
sortedFoos.Add(new Foo() { Bar = 2 });
sortedFoos.Add(new Foo() { Bar = 1 });

foreach (Foo foo in sortedFoos)
{
    Console.WriteLine(foo.Bar);
}
// Prints 1, 2

注意:此集合的行为类似于 HashSet<T> 。如果添加多个比较相等的对象,它们将被丢弃。

关于c# - 根据特定属性维护排序顺序的集合类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4576616/

相关文章:

arrays - 使用曼伯迈尔斯算法的后缀数组

c# - 如何以编程方式创建 Enterprise Architect 包、类、属性

c# - 如何使 Form 和 HWND 相互重新定位?

data-structures - 如何有效地跟踪集合中的最小元素?

c - C语言返回数组指针的问题

c - 生成 8 位唯一随机数

java - 如何在 Java 中存储仅需要 'contains' 操作的巨大静态/不可变字符串集

c# - Linq 查询对表中的值求和

C# 包装器接口(interface)错误 : E_NOINTERFACE

c# - .Net Enterprise Library - 已存在具有 GUID 的事件源实例