我有一個大的值列表(100-200字符的字符串),我需要返回一個不同的列表。什麼是最有效的方式來使用.NET來做到這一點?我能想到的2種方式是:什麼是使用.NET創建不同項目列表的最有效方式?
- 使用了IEnumerable類的獨特()方法
- 使用字典
如果字典的方法是在原料方面更快,考慮權衡代碼的可維護性的決定。
我有一個大的值列表(100-200字符的字符串),我需要返回一個不同的列表。什麼是最有效的方式來使用.NET來做到這一點?我能想到的2種方式是:什麼是使用.NET創建不同項目列表的最有效方式?
如果字典的方法是在原料方面更快,考慮權衡代碼的可維護性的決定。
我認爲Enumerable.Distinct
與使用字典一樣快,如果你只做一次。如果你想能夠添加/刪除值和保持鮮明度,你可以建立一個HashSet<string>
(這基本上是我期望Distinct在底層做的,但Distinct()
顯然會返回新值,因爲它發現它們,維護爲了
其實,只是用:
HashSet<string> distinctItems = new HashSet<string>(list);
將是一個不錯的(簡單的)解決方案,如果你不介意的排序被搞砸這比使用Dictionary
簡單,概念上。清潔以及(因爲你不真的想要映射鍵值)
(與以往一樣,我會建議先找到最易讀的解決方案,並對其進行基準測試 - 如果「足夠快」,那麼就去做。如果您想將其用作另一個查詢的一部分,那麼Distinct
可能是最可讀的方式。否則,我會建議HashSet
。)
我會證明你在這裏使用分析。用示例項目生成一個列表,使用兩種方法對它進行排序,並測量每種方式使用的時間。
如果可讀性是一個問題,請創建一個GetDistinctItems
方法並將代碼放入其中:voilà,自記文件代碼。
我個人會使用LINQ提供的Distinct()方法。閱讀和維護要容易得多。雖然使用LINQ將比使用字典慢,但差異會很小(如果列出的話),您最好花時間優化數據庫查詢或Web服務調用。