HashSet或Distinct用于读取List<>中的不同属性值对象

时间:2013-10-10 13:01:56

标签: c# performance linq c#-4.0 hashset

这与此(Getting all unique Items in a C# list)问题有关。

上面的问题是谈论一个简单的数组值。我有一个从第三方Web服务返回的对象:

public class X
{
    public Enum y {get; set;}

}

我有一个这些对象的列表List<x> data;,总共约100条记录但是变量。现在我想要属性y列表中的所有可能值,并且我想绑定它做CheckBoxList.DataSource(如果有所不同)。

这是最有效的方法吗?

我可以想到两种算法:

var data = HashSet<Enum> hashSet = new HashSet<Enum>(xs.Select(s => s.y));
chkBoxList.DataSource = data;

或者

var data = xs.Select(s => s.y).Distinct();
chkBoxList.DataSource = data;

我的直觉是HashSet,但我不是百分百肯定。

如果有人有任何想法,愿意接受更好的想法吗?

3 个答案:

答案 0 :(得分:2)

如果是一次性操作 - 请使用。Distinct。如果您要反复添加元素 - 请使用HashSet

答案 1 :(得分:0)

HashSet,因为它在构造hashset对象之后保持对象,并且预处理它不需要昂贵的操作。

另一方面,每次枚举DataSource时都可能会评估Distinct枚举器,并且将重复删除重复值的所有工作。

答案 2 :(得分:0)

因为他们没有更好的答案,我会回答我自己的问题。我决定使用HashSet虽然性能优势对于我的结果集大小可能是微不足道的。归根结底,HashSet取自here的定义是:

  

HashSet是一个包含唯一元素的无序集合。

我想要一个无序的值集合。 (课程的马)我也不需要索引,我只想枚举我的设置。

所以它似乎最合适。将Staffi标记为答案,因为他的信息量最大。