5

这在某种程度上与这个(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 但我不是 100% 确定。

如果有人有任何想法,可以接受更好的想法?

4

2 回答 2

3

如果它是一次性操作 - 使用。Distinct. 如果您要一次又一次地添加元素 - 使用HashSet

于 2013-10-10T13:07:08.587 回答
2

HashSet一个,因为它在构建哈希集对象之后保留对象,并且 foreach-ing 它不需要昂贵的操作。

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

于 2013-10-10T13:07:34.667 回答