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
构造函数。
在这两种情况下,您基本上只是让已排序的集合计算出哪个应该排在另一个之前 - 然后它会在需要时使用它来执行比较。
请注意,这意味着任何具有相同日期的值都将被视为相等,因此每个日期只能有一个值。如果这不是您想要的,您的比较将需要使用其他一些鉴别器来判断日期是否相等。
我正在考虑用 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
构造函数。
在这两种情况下,您基本上只是让已排序的集合计算出哪个应该排在另一个之前 - 然后它会在需要时使用它来执行比较。
请注意,这意味着任何具有相同日期的值都将被视为相等,因此每个日期只能有一个值。如果这不是您想要的,您的比较将需要使用其他一些鉴别器来判断日期是否相等。