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

SortedSet - custom order when storing a class object

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

但是,到目前为止我看到的所有示例都与存储简单对象有关 - 整数、字符串等。

我想为具有多个属性的自定义 class 实现此功能,但是 class 还包含一个我想用作 'indexer' 的日期。

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

提前致谢。

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

假设 "indexer" 你的意思是 "ordering",你只需让你的类型实现 IComparable<Foo>,并提供一个 CompareTo 方法来比较 this 内的日期] 到另一个 Foo.

中的日期

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

在这两种情况下,您基本上只是让已排序的集合计算出哪个应该排在另一个之前 - 然后它会在需要时使用它来执行比较。

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