有人知道c#中是否有类似Java的Set集合吗?我知道您可以使用Dictionary或HashTable来填充但忽略值,从而在某种程度上模拟一个集合,但这不是一种非常优雅的方式。
Set
Dictionary
HashTable
尝试# EYZ0:
HashSet(Of T)类提供了高性能的集合操作。集合是一个不包含重复元素的集合,它的元素没有特定的顺序… HashSet(of T)对象的容量是该对象可以容纳的元素数量。HashSet(Of T)对象的容量会随着元素的添加而自动增加。 HashSet(Of T)类基于数学集模型,提供了类似于访问字典(TKey, TValue)或哈希表集合的键的高性能集操作。简单来说,HashSet(Of T)类可以看作是一个没有值的字典(TKey, TValue)集合。 一个HashSet(Of T)集合没有排序,不能包含重复的元素…
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那样满足集合的需求。
HashSet<T>
wintellent PowerCollections可能也有帮助。
我用Iesi。# EYZ0集合
它被用在很多OSS项目中,我第一次接触它是在NHibernate中
在CodePlex上看看PowerCollections。除了Set和OrderedSet,它还有一些其他有用的集合类型,如Deque, MultiDictionary, Bag, OrderedBag, OrderedDictionary和OrderedMultiDictionary。
对于更多的集合,还有C5通用集合库。
我使用Dictionary<T, object>的包装器,在值中存储空值。这就提供了O(1)键的添加、查找和删除,并且在所有意图和目的上都像一个集合。
Dictionary<T, object>
我知道这是一个旧线程,但我遇到了同样的问题,发现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)。
SortedSet<T>
O(1)
O(log n)