我想盡量減少從列表中檢索單個唯一元素所需的時間。 Find
,Single
和First
中哪一個是最快的方法? 請注意,搜索鍵是一個唯一的ID。Find,Single,First中哪一個最快?
17
A
回答
28
最快(對於一個大集)將是讓他們對Dictionary<TKey,TValue>
鍵,並使用它。
Single
和First
做不同的事情; Single
總是迭代整個集合,即使它在列表的開始處找到它,所以First
通常會比Single
更快,因爲它會短路。
23
First
將比Single
更快,因爲它一旦找到匹配就可以終止。另一方面,這意味着它不驗證只有一個項目匹配的謂詞。
Find
應該像First
一樣快,但便攜性不如它只能在列表上工作。如果你一般使用LINQ,我會嘗試堅持使用LINQ操作符,除非使用替代方法有明顯的好處。
正如馬克所說,如果你打算經常這樣做,你應該使用Dictionary<,>
。您可以使用ToDictionary
運營商輕鬆地做到這一點:
var dictionary = list.ToDictionary(x => x.Id);
// Now you can look up by ID really quickly
顯然創建詞典需要一些時間才能開始,所以你只是想這樣做,如果你是多次搜索。
2
他們是不同的方法。 Find
在List<T>
中定義,它幾乎與First
相同,它在Enumerable.cs
中定義爲IEnumerable<T>
上的擴展方法。如果找到條件項目(不需要遍歷整個集合),它們都會返回,所以它們的性能差別很小。
雖然Single
返回條件項目,並且還保證此項目是唯一符合條件的項目。所以在大多數情況下,Single
比First
/Find
慢,因爲它需要遍歷集合。
1
作爲對現有答案的補充:List.Find比IEnumerable快得多。首先,因爲第一個可以在List的內部數組上運行。後者必須經過IList界面。
相關問題
- 1. 查找('first'),Find('count')或Field('id')...哪個更快?
- 2. 哪個最快? find()或標準
- 3. unordered_map:哪一個更快find()或count()?
- 4. LINQ First()或Single()參數
- 5. 哪一個是最快的?
- 6. 最好是使用Find()或Single()從數據庫中選擇一個項目?
- 7. 哪一個是最快的方法
- 8. Single LinkedList刪除最後一個節點
- 9. Excel VBA中的哪個更快:InStr或Find?
- 10. 哪個演員最快?
- 11. array_push()vs $ array [] = ....哪個最快?
- 12. 哪個是PHP中最快的?
- 13. J2ME中哪個循環最快?
- 14. 唧唧to same more more more single single single single single single single single single single single more more??
- 15. 確定哪一列.find在
- 16. 哪一行.Find已於
- 17. Resharper「Find Usages」的哪個鍵盤快捷鍵
- 18. Error:「could not find function ..」when using .First()
- 19. Dropdown與.find()。first()和.next()方法不同
- 20. 其中$ _REQUEST,$ _GET和$ _POST哪一個最快?
- 21. 哪一個速度最快?在子查詢中計數或與
- 22. 哪一條最快?數據檢索
- 23. 哪一個跑得快?
- 24. 哪一個是更快
- 25. loadHTML&loadHTMLFile,哪一個更快?
- 26. 使用Single/First方法返回linq或lambda表達式中的多個值
- 27. 哪個是oracle查詢最快的?
- 28. 哪個函數執行最快?
- 29. 哪個是log4Net最快的appender?
- 30. Regex.Replace,String.Replace或StringBuilder.Replace哪個是最快的?
@usr提出了一個有趣的觀點。如果他是正確的,使用Find()會不會更快? – Coops 2013-04-16 11:54:33