C#SortedSet 和相等
我对SortedSet的行为有点疑惑,请看下面的例子:
public class Blah { public double Value { get; private set; } public Blah(double value) { Value = value; } } public class BlahComparer : Comparer { public override int Compare(Blah x, Blah y) { return Comparer.Default.Compare(x.Value, y.Value); } } public static void main() { var blahs = new List {new Blah(1), new Blah(2), new Blah(3), new Blah(2)} //contains all 4 entries var set = new HashSet(blahs); //contains only Blah(1), Blah(2), Blah(3) var sortedset = new SortedSet(blahs, new BlahComparer()); }
因此,如果Compare(x,y)返回0,SortedSet会丢弃条目。我可以阻止这种情况,这样我的SortedSet就像HashSet一样,只有在Equals()返回true时才丢弃条目吗?
如果在值相等时提供备用比较并且比较方法将返回0,则可以执行此操作。在大多数情况下,这可能只是推迟问题而不是解决问题。 正如其他人所指出的那样,SortedSet会丢弃重复项,当您提供自定义比较器时,它会使用它来确定重复性。
static void Main(string[] args) { var blahs = new List { new Blah(1, 0), new Blah(2, 1), new Blah(3, 2), new Blah(2, 3) }; blahs.Add(blahs[0]); //contains all 4 entries var set = new HashSet (blahs); //contains all 4 entries var sortedset = new SortedSet (blahs, new BlahComparer()); } } public class Blah { public double Value { get; private set; } public Blah(double value, int index) { Value = value; Index = index; } public int Index { get; private set; } public override string ToString() { return Value.ToString(); } } public class BlahComparer : Comparer { public override int Compare(Blah x, Blah y) { // needs null checks var referenceEquals = ReferenceEquals(x, y); if (referenceEquals) { return 0; } var compare = Comparer.Default.Compare(x.Value, y.Value); if (compare == 0) { compare = Comparer.Default.Compare(x.Index, y.Index); } return compare; } }
描述
SortedSet:您需要存储许多元素,并且您希望以排序顺序存储它们,并且还消除数据结构中的所有重复项 。 SortedSet类型是C#语言和.NET Framework中System.Collections.Generic命名空间的一部分,它提供此function。
根据MSDN Compare
方法返回
更多信息
更新
如果您的Bla
类实现了IComparable
并且您希望对列表进行排序,则可以执行此操作。
var blahs = new List {new Blah(1), new Blah(2), new Blah(3), new Blah(2)}; blahs.Sort();
如果您的Bla
类没有实现IComparable
并且您希望列表排序,则可以使用Linq
(System.Linq命名空间)。
blahs = blahs.OrderBy(x => x.MyProperty).ToList();
你找不到其他的Blah(2)
因为你正在使用Set
。
Set - A collection of well defined and **distinct** objects
例如, MultiSet
允许重复的对象。
上述就是C#学习教程:C#SortedSet 和相等分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1023118.html