當我使用SortedDictionary<>
而不是Dictionary<>
考慮到我需要一個有序的詞典時,性能是否受到影響,所以如果我使用了詞典,我將不得不手動排序它。哪個會更快? SortedDictionary<>
或(Dictionary<>
+手動排序)。SortedDictionary <>或(Dictionary <> Manual Sort)
回答
插入到SortedDictionary
是O(log(n)),所以插入n個項目是O(n log(n))。相反,插入到Dictionary
中的是O(1),因此插入n個項目是O(n),但是您需要在使用之前對項目進行排序,即O(n log(n))。基於此,沒有太大的區別,但Dictionary
具有散列的開銷,而SortedDictionary可能具有更差的內存局部性,因爲它可能實現爲鏈接結構。
SortedDictionary還對可以使用的鍵類型設置限制,因爲它需要按鍵排序,而Dictionary不使用散列。
真的,哪個更好取決於你的訪問模式,所以最好的做法是衡量你的用例的性能。
很好的答案。這還取決於他是否正在做大量的查找或刪除操作,這兩者都是使用'SortedDictionary'的O(log(n))和'Dictionary'的O(1)。 – 2013-02-28 23:06:08
有一個性能問題。閱讀http://msdn.microsoft.com/en-us/library/f7fta44c.aspx
基本上,SortedDictionary<T>
是一個二叉搜索樹,而Dictionary<T>
是一個哈希表。
對於插入,刪除和隨機查找,Dictionary<T>
會更快。如果您按順序進行不經常修改和頻繁列表,則SortedDictionary
會更快。如果您經常進行修改和隨機查找,那麼Dictionary
會更快,並且很少需要對輸出進行排序。
這真的要取決於你如何使用字典。
- 你使用了很多物品還是不是很多物品。
- 與您需要排序時相比,您添加新項目的頻率如何。
- 你做更多的查找或插入
做的最好的事情就是做真實上下的數據有兩種方法一些性能測試,看看哪些適合你的情況更好。
這取決於您是否將數據添加到字典中,與獲取排序結果分開,還是一次完成。
如果您在較長時間內添加數據,您將使用SortedDictionary<>
獲得每次添加的小性能打擊,但是當您最終希望得到排序結果時,您可以立即得到它。例如,如果您等待用戶輸入添加項目,這是理想的,因爲小的性能點擊並不明顯。
如果您創建一本詞典,向其中添加數據並立即獲取排序結果,則Dictionary<T>
會更快,因爲它使用更快的排序算法(因爲它可以一次排序,而不是維護排序結果而物品被添加)。
- 1. list <myClass<int> *> sort
- 2. Sort Map <String,List <Object[]>>
- 3. 如何將Dictionary <String,String>添加到Array <Dictionary <String,String >>?
- 4. 索引檢索SortedDictionary <>
- 5. Json反序列化形式Dictionary <string,Dictionary <string,string >>
- 6. Transforming Dictionary <T,U> to Dictionary <T,U.PropertyValue>
- 7. Dictionary <short,Dictionary <EnFunction,bool >> model binding not working
- 8. Dictionary <string,MyObject>或列表<MyObject>與C#3.5?
- 9. SortedList <K,V> vs SortedDictionary <K,V> vs詞典<K,V>
- 10. 比較SortedDictionary <字符串列表<foo>> C#
- 11. Enum和Dictionary <Enum,Action>
- 12. C#List <dictionary> To Json
- 13. Hashtable to Dictionary <> syncroot。
- 14. Sort QMap <QString,int>
- 15. <script>或<noscript>?
- 16. 如</p> <p><code><p>This is text </p></code>或<code><div></code>或<code>This is text</code></p> <p>使用<code>XmlPullParser</code>檢索URL
- 17. 檢查List <Dictionary <string,object >>中是否存在Dictonary <string,object>?
- 18. 如何將Collection <object>轉換爲ArrayList <Dictionary <string,string>>?
- 19. <Provider /> outside或<Router /> outside>?
- 20. IE事件<input>或<textarea>或<textarea>
- 21. C#將Dictionary <string,AnyType>轉換爲Dictionary <string,Object>(涉及反射)
- 22. C#JSON反序列化Dictionary <string,Dictionary <string,string >>可選?
- 23. 使用Linq將Dictionary <String,double>轉換爲Dictionary <String,float>
- 24. BindingList <T> .Sort()表現得像一個列表<T> .Sort()
- 25. 語法<(中<(<'TKEY的,TValue>中)>)> .. ::枚舉
- 26. XML使用Dictionary <string,List <string>>對象
- 27. 從列表中獲取唯一值<Dictionary <string,string >>
- 28. populate Dictionary <string,List <string>> into android
- 29. Dictionary <obj,List <obj>> into GridView Datasource?
- 30. 如何修改List中的值<Dictionary <string,object >>
你使用什麼類型的鍵和值以及你正在執行什麼操作? – mattytommo 2013-02-28 21:10:16
當你使用[Stopwatch](http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx)並測量它時發生了什麼? – dtb 2013-02-28 21:10:30
如果您以前從未寫過排序,我建議您選擇第二個選項,以便您知道第一個選項爲什麼正確。如果您之前已經編寫過排序,請使用第一個選項,直到您遇到可測量的重要性能問題。 – 2013-02-28 21:12:16