繁体   English   中英

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

[英]HashSet or Distinct to read distinct values of property in List<> of objects

这在某种程度上与此相关( 获取C#列表中的所有唯一项 )问题。

上面的问题是谈论一系列简单的价值观。 我有一个从第三方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,但我不是百分百肯定。

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

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

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

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

因为他们没有更好的答案,我将回答我自己的问题。 我决定使用HashSet虽然对于我的结果集大小,性能优势可能很小。 归结到它时,从这里获取的HashSet的定义是:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM