有人知道c#中是否有类似于Java的Set集合的好方法吗?我知道您可以使用Dictionary或HashTable来填充但忽略值,从而在某种程度上模拟一个集合,但这不是一种非常优雅的方式。
当前回答
我使用Dictionary<T对象>的包装器,在值中存储空值。这就提供了O(1)键的添加、查找和删除,并且在所有意图和目的上都像一个集合。
其他回答
在CodePlex上看看PowerCollections。除了Set和OrderedSet,它还有一些其他有用的集合类型,如Deque, MultiDictionary, Bag, OrderedBag, OrderedDictionary和OrderedMultiDictionary。
对于更多的集合,还有C5通用集合库。
如果你使用。net 4.0或更高版本:
在需要排序的情况下,使用SortedSet<T>。否则,如果没有,则使用HashSet<T>,因为它是O(1)用于搜索和操作操作。而SortedSet<T>对于搜索和操作操作是O(log n)。
尝试HashSet:
The HashSet(Of T) class provides high-performance set operations. A set is a collection that contains no duplicate elements, and whose elements are in no particular order... The capacity of a HashSet(Of T) object is the number of elements that the object can hold. A HashSet(Of T) object's capacity automatically increases as elements are added to the object. The HashSet(Of T) class is based on the model of mathematical sets and provides high-performance set operations similar to accessing the keys of the Dictionary(Of TKey, TValue) or Hashtable collections. In simple terms, the HashSet(Of T) class can be thought of as a Dictionary(Of TKey, TValue) collection without values. A HashSet(Of T) collection is not sorted and cannot contain duplicate elements...
我用Iesi。集合http://www.codeproject.com/KB/recipes/sets.aspx
它被用在很多OSS项目中,我第一次接触它是在NHibernate中
如果你使用。net 3.5,你可以使用HashSet<T>。net确实不能像Java那样满足集合的需求。
Wintellect PowerCollections也可能有所帮助。
推荐文章
- 无法找到适合特定区域性或中性区域性的任何资源
- .Net HttpWebRequest.GetResponse()在返回http状态码400(坏请求)时引发异常
- 在using块的中间返回
- 找到未使用的代码
- 是什么让Visual Studio调试器停止评估ToString重写?
- ContentControl和ContentPresenter有什么区别?
- 一个字符串的字符串列表
- 无法确定条件表达式的类型,因为'int'和<null>之间没有隐式转换
- 从实体框架中删除单个记录?
- 创建一个完成的任务
- 字典的字面符号在c# ?
- 随机字符串生成器返回相同的字符串
- 为什么Func<T,bool>而不是Predicate<T>?
- .NET中的Map和Reduce
- 我如何能使一个组合框不可编辑的。net ?