[英]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.