2009-11-13 69 views
1

我有一個大的值列表(100-200字符的字符串),我需要返回一個不同的列表。什麼是最有效的方式來使用.NET來做到這一點?我能想到的2種方式是:什麼是使用.NET創建不同項目列表的最有效方式?

  1. 使用了IEnumerable類的獨特()方法
  2. 使用字典

如果字典的方法是在原料方面更快,考慮權衡代碼的可維護性的決定。

回答

7

我認爲Enumerable.Distinct與使用字典一樣快,如果你只做一次。如果你想能夠添加/刪除值和保持鮮明度,你可以建立一個HashSet<string>(這基本上是我期望Distinct在底層做的,但Distinct()顯然會返回新值,因爲它發現它們,維護爲了

其實,只是用:

HashSet<string> distinctItems = new HashSet<string>(list); 

將是一個不錯的(簡單的)解決方案,如果你不介意的排序被搞砸這比使用Dictionary簡單,概念上。清潔以及(因爲你不真的想要映射鍵值)

(與以往一樣,我會建議先找到最易讀的解決方案,並對其進行基準測試 - 如果「足夠快」,那麼就去做。如果您想將其用作另一個查詢的一部分,那麼Distinct可能是最可讀的方式。否則,我會建議HashSet。)

1

我會證明你在這裏使用分析。用示例項目生成一個列表,使用兩種方法對它進行排序,並測量每種方式使用的時間。

如果可讀性是一個問題,請創建一個GetDistinctItems方法並將代碼放入其中:voilà,自記文件代碼。

2

我個人會使用LINQ提供的Distinct()方法。閱讀和維護要容易得多。雖然使用LINQ將比使用字典慢,但差異會很小(如果列出的話),您最好花時間優化數據庫查詢或Web服務調用。

相關問題