这与此(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,但我不是百分百肯定。
如果有人有任何想法,愿意接受更好的想法吗?
答案 0 :(得分:2)
如果是一次性操作 - 请使用。Distinct
。如果您要反复添加元素 - 请使用HashSet
答案 1 :(得分:0)
HashSet
,因为它在构造hashset对象之后保持对象,并且预处理它不需要昂贵的操作。
另一方面,每次枚举DataSource时都可能会评估Distinct
枚举器,并且将重复删除重复值的所有工作。
答案 2 :(得分:0)
因为他们没有更好的答案,我会回答我自己的问题。我决定使用HashSet
虽然性能优势对于我的结果集大小可能是微不足道的。归根结底,HashSet
取自here的定义是:
HashSet是一个包含唯一元素的无序集合。
我想要一个无序的值集合。 (课程的马)我也不需要索引,我只想枚举我的设置。
所以它似乎最合适。将Staffi标记为答案,因为他的信息量最大。