2008-10-02 42 views
9

对于需要保存唯一整数列表的类,您会推荐什么?推荐用于独特整数集合的.NET类?

我将要添加()整数到集合,并检查是否存在载有()。

也很高兴也让他们在一个列表作为显示字符串,即。 “1,5,10,21”。

+1

对不起,我没有指定。我可以使用最新的框架。 3.5但你的答案可能会帮助其他人无法使用最新的。 – 2008-10-02 18:21:21

回答

24

HashSet

HashSet<T>类提供高性能的设置操作。一个集合是一个不包含重复元素的集合,其元素没有特定顺序...

对象的容量是对象可以容纳的元素的数量。当元素添加到对象时,对象的容量会自动增加。

HashSet<T>该类基于数学集的模型并提供与访问Dictionary<TKey, TValue>Hashtable集合的键类似的高性能集合操作。简而言之,HashSet<T>类可以被认为是没有值的Dictionary<TKey, TValue>集合。

一个HashSet<T>集合没有排序,不能包含重复的元素......

+0

我看着arraylist,它肯定比arraylist好,所以我删除了我以前的答案。 – EBGreen 2008-10-02 18:10:41

+1

HashSet将ToString的类型...不是一个列表。并且他显示的列表是HashSet不支持的顺序之一。 – MagicKat 2008-10-02 18:16:15

2

如果您不能使用.NET 3.5,那么你就不能使用HashSet的。如果是这种情况,那么基于Dictionary结构很容易推出自己的产品。

public class Set<T> { 
    private class Unit { ... no behavior } 
    private Dictionary<T, Unit> d; 

.... 
} 

单位旨在是一个只有一个值的类型。无论您将元素映射到,只需使用键即可知道您的设备中有什么。您在问题中要求的操作很容易实现。

1

你可以从KeyedCollection继承一个类。通过这种方式,您的密钥本身可以是值,您可以覆盖ToString,以便获得所需的输出。这可以给你你想要/需要的行为。

注意,这个答案是对的框架将q

3

在我的测试中2.0的一部分,我发现有一个虚拟值字典比HashSet的,具有非常大的数据集处理时(快在我的情况下是100,000+)。我期望这是因为词典允许你设置一个初始容量,但我不知道。在你描述的情况下,如果我想要一个非常大的一组数字,那么我可能会使用Dictionary,然后(或者当我添加到Dictionary中时,取决于意图)使用字符串生成器迭代它,创建输出字符串。