SortedSet - 存储类对象时的自定义顺序

时间:2015-01-21 12:24:14

标签: c# asp.net ienumerable hashset sortedset

我正在考虑用SortedSet替换HashSet,因为它更适合我正在存储的数据。

然而,到目前为止我看到的所有例子都与存储简单对象有关 - int,字符串等。

我想为具有许多属性的自定义类实现此功能,但该类还包含一个我想用作“索引器”的日期。

问题是如何为要使用的集声明自定义索引器,这将覆盖默认行为?

提前致谢。

2 个答案:

答案 0 :(得分:4)

实现IComparer并将其传递给SortedSet构造函数;

请参阅:

https://msdn.microsoft.com/en-us/library/dd395024%28v=vs.110%29.aspx

例如:我用这个

internal class SortedIndex
{
    public double Comparable { get; set; }
    public int Index { get; set; }
}

internal class SortedIndexComparar : IComparer<SortedIndex>
{
    public int Compare(SortedIndex x, SortedIndex y)
    {
        return x.Comparable.CompareTo(y.Comparable);
    }
}

答案 1 :(得分:1)

假设“indexer”表示“排序”,您只需创建类型工具IComparable<Foo>,并提供CompareTo方法,将this中的日期与日期内的日期进行比较其他Foo

或者您可以实施IComparer<Foo>(使用Compare(Foo x, Foo y)方法)并将其传递给SortedSet构造函数。

在这两种情况下,你基本上只是允许排序集合在另一个之前运行 - 然后在需要时使用它来执行比较。

请注意,这意味着具有相同日期的任何值都将被视为相等,因此您只能为每个日期设置一个值。如果那不是你想要的,你的比较需要在日期相等的时候使用其他一些鉴别器。