簡體   English   中英

從字符串列表中獲取不同且有序的成員 - linq或hashset用於唯一哪一個更快/更適合

[英]Getting distinct and ordered members from a list of strings - linq or hashset for unique which one is faster / better suited

我有一個大的字符串列表(約5k-20k條目),我需要訂購,也刪除重復。

我現在已經以兩種方式完成了這項工作,一次使用hashset,一次只使用linq。 具有該數量的條目的測試沒有顯示出很大的差異,但我想知道什么方式,因此哪種方法更適合。

對於方式(myList是數據類型List):

Linq:我正在使用1個linq語句對列表進行排序並從中獲取不同的值。

myList = myList.OrderBy(q => q).Distinct().ToList();

Hashset:我正在使用hashset刪除所有重復項,然后我正在訂購列表

myList = new HashSet<String>(myList).ToList<String>();
myList = myList.OrderBy(q => q).ToList();

就像我說的那樣,我做的測試與兩種方法的消耗大致相同,但我仍然想知道一種方法是否優於另一種方法,如果是這樣,為什么(代碼是高性能部分,我需要每毫秒一次)可以用它)。

如果你真的關心每一納秒,那么

myList = myList.Distinct().OrderBy(q => q).ToList();

可能會略快於:

myList = myList.OrderBy(q => q).Distinct().ToList();

如果有大量重復。

LINQ方法更具可讀性,與其他人所說的顯式創建HashSet<T>具有相似的性能。 事實上,如果原始List已經排序,它可能稍微快一些,因為LINQ方法將在排序之前保留初始順序,而顯式創建HashSet<T>將以未定義的順序枚舉。

他們幾乎是一樣的。 Distinct還使用Set<T>來消除重復。 我的建議是先使用Distinct然后對你的物品進行排序。 同樣在你的第二個代碼中, ToList<String>調用是多余的,你可以在HashSet上使用OrderBy然后調用ToList

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM