Is there a “Set” data structure in .Net?
理想情况下,我正在寻找一个模板化的逻辑集类。它将具有所有的标准集操作,如并集、交集等,并折叠重复项。
我最终创建了自己的基于C字典<>的集合类——只使用键。
我想,你能得到的最接近的就是
我所看到的最佳集合实现是出色的Wintelect功能集合的一部分:http://www.codeplex.com/powercollections。
集合实现可以在这里找到:
http://www.codeplex.com/powercollections/sourcecontrol/fileview.aspx?itemID=101886&;changesetID=6259
它具有所有预期的集合操作(联合、相交等)。
希望这有帮助!
不,框架中没有一个本机的。大多数项目都使用一种开源实现(即nhibernate),称为iesi.collections。下面是一篇关于它的代码项目文章:
http://www.codeproject.com/kb/recipes/sets.aspx
你检查过3.5中的哈希集了吗?
我不认为C有任何内置的东西,但是我知道有一些实现在网络上浮动。关于这类事情也有一些好文章:
这是关于高效表示数据结构的系列文章的第6部分。本部分重点介绍用C表示集合。
集合集合的实现集合类的实现集合类的另一个实现
最后…
实际上,我自己也使用这个库作为一年左右以前所做的集实现的基础。
下面是一个简单的实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public sealed class MathSet<T> : HashSet<T>, IEquatable<MathSet<T>> { public override int GetHashCode() => this.Select(elt => elt.GetHashCode()).Sum().GetHashCode(); public bool Equals(MathSet<T> obj) => SetEquals(obj); public override bool Equals(object obj) => Equals(obj as MathSet<T>); public static bool operator ==(MathSet<T> a, MathSet<T> b) => ReferenceEquals(a, null) ? ReferenceEquals(b, null) : a.Equals(b); public static bool operator !=(MathSet<T> a, MathSet<T> b) => !(a == b); } |
示例用法:
1 2 3 4 5 6 7 8 |
请参阅这个问题,了解为什么这种方法会被考虑超过