C# 是否有一个“问题”;“设置”;Net中的数据结构?

C# 是否有一个“问题”;“设置”;Net中的数据结构?,c#,data-structures,set,C#,Data Structures,Set,理想情况下,我正在寻找一个模板化的逻辑集类。它将具有所有标准集操作,如并集、交集等,并折叠重复项 最后,我基于C#Dictionary创建了自己的set类,只是使用了键。我想这是最接近的了。不,框架中没有本机的set类。大多数项目都使用一种开源实现(即nHibernate),称为Iesi.Collections。下面是一篇关于它的CodeProject文章: 我认为c#没有任何内置功能,但我知道网络上有一些实现。也有一些关于这类事情的好文章: 关于有效表示数据结构的系列文章。本部分重点介绍用C#

理想情况下,我正在寻找一个模板化的逻辑集类。它将具有所有标准集操作,如并集、交集等,并折叠重复项


最后,我基于C#Dictionary创建了自己的set类,只是使用了键。

我想这是最接近的了。

不,框架中没有本机的set类。大多数项目都使用一种开源实现(即nHibernate),称为Iesi.Collections。下面是一篇关于它的CodeProject文章:

我认为c#没有任何内置功能,但我知道网络上有一些实现。也有一些关于这类事情的好文章:

关于有效表示数据结构的系列文章。本部分重点介绍用C#表示集合

一组集合的属性
属于一个集合类
集合类的

最后


事实上,我在一年前就已经将自己作为了一个set实现的基础。

我所见过的最好的set实现是出色的Wintellect Power Collections的一部分:

集合实现可在此处找到:

它具有所有预期的集合操作(并集、交集等)


希望这有帮助

您签出了3.5中的吗?

下面是一个简单的实现:

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);
}
公共密封类MathSet:HashSet,IEquatable
{
public override int GetHashCode()=>this.Select(elt=>elt.GetHashCode()).Sum().GetHashCode();
公共bool Equals(MathSet obj)=>SetEquals(obj);
公共覆盖布尔等于(对象obj)=>等于(对象obj作为数学集);
公共静态布尔运算符==(数学集a、数学集b)=>
ReferenceEquals(a,null)?ReferenceEquals(b,null):a.Equals(b);
公共静态布尔运算符!=(数学集a,数学集b)=>!(a==b);
}
用法示例:

var a = new MathSet<int> { 1, 2, 3 };
var b = new MathSet<int> { 3, 2, 1 };

var c = a.Equals(b);                        // true

var d = new MathSet<MathSet<int>> { a, b }; // contains one element

var e = a == b;                             // true
var a=新的数学集{1,2,3};
var b=新的数学集{3,2,1};
var c=a等于(b);//真的
var d=新的数学集{a,b};//包含一个元素
变量e=a==b;//真的

查看为什么在
HashSet

@d03boy上考虑这种方法:现在它有了HashSet,但使用了一点之后,我认为这个接口真的很糟糕。NET 4有一个ISet接口以及两个实现,HashSet和SortedSetSee,查看一个简单的集合实现。Matt的可能重复,+1。这听起来正是他想要的。看起来这是在编写codeproject文章很久之后添加的。