c#集合?

有人知道c#中是否有类似Java的Set集合吗?我知道您可以使用DictionaryHashTable来填充但忽略值,从而在某种程度上模拟一个集合,但这不是一种非常优雅的方式。

433262 次浏览

尝试# EYZ0:

HashSet(Of T)类提供了高性能的集合操作。集合是一个不包含重复元素的集合,它的元素没有特定的顺序…

HashSet(of T)对象的容量是该对象可以容纳的元素数量。HashSet(Of T)对象的容量会随着元素的添加而自动增加。

HashSet(Of T)类基于数学集模型,提供了类似于访问字典(TKey, TValue)哈希表集合的键的高性能集操作。简单来说,HashSet(Of T)类可以看作是一个没有值的字典(TKey, TValue)集合。

一个HashSet(Of T)集合没有排序,不能包含重复的元素…

如果你使用。net 3.5,你可以使用HashSet<T>。net确实不能像Java那样满足集合的需求。

wintellent PowerCollections可能也有帮助。

我用Iesi。# EYZ0集合

它被用在很多OSS项目中,我第一次接触它是在NHibernate中

在CodePlex上看看PowerCollections。除了Set和OrderedSet,它还有一些其他有用的集合类型,如Deque, MultiDictionary, Bag, OrderedBag, OrderedDictionary和OrderedMultiDictionary。

对于更多的集合,还有C5通用集合库

我使用Dictionary<T, object>的包装器,在值中存储空值。这就提供了O(1)键的添加、查找和删除,并且在所有意图和目的上都像一个集合。

我知道这是一个旧线程,但我遇到了同样的问题,发现HashSet非常不可靠,因为给定相同的种子,GetHashCode()返回不同的代码。我想,为什么不用List隐藏add方法呢

public class UniqueList<T> : List<T>
{
public new void Add(T obj)
{
if(!Contains(obj))
{
base.Add(obj);
}
}
}

因为List仅使用Equals方法来确定相等性,所以可以在T类型上定义Equals方法,以确保获得所需的结果。

如果你使用。net 4.0或更高版本:

在需要排序的情况下,使用SortedSet<T>。否则,如果你没有,那么使用HashSet<T>,因为它是O(1)搜索和操作操作。而对于搜索和操作操作,SortedSet<T>O(log n)