2009-09-09 42 views
2

我需要在我的sortedDictionary中設置一個元素的值,通過index訪問。設置一個SortedDictionary的第i個值

I.e.

sortedDictionary.Values[index] = value; // compile error 

請注意,以下內容不正確,因爲它是通過鍵訪問的,而不是索引。

sortedDictionary[index] = value; // incorrect 

我想出了以下解決方案,但直覺告訴我這很慢。我假設按鍵訪問是O(log N),並且按索引訪問是O(1),但我不確定。

sortedDictionary[sortedDictionary.ElementAt(index).Key] = value; 

一些背景資料:

我使用SortedDictionary,因爲我需要快速插入,刪除,查詢,並能夠訪問相鄰元素。 (即次高或次低)。效率很重要。

+2

ElementAt(index)是枚舉的擴展方法 - 它在O(n)時間內工作,因爲SortedDictionary不實現IList接口。 – maciejkow 2009-09-09 08:23:01

+0

似乎沒有任何內置的.NET結構可以滿足我需要的功能。我可能會跳過列表。 – abtree 2009-09-09 11:21:25

回答

2

這是一個權衡。

您可以使用SortedList並獲得更快的索引查找,但是您會犧牲插入速度。

引述MSDN

...的 SortedDictionary<(Of <(TKey, TValue>)>)SortedList<(Of <(TKey, TValue>)>)類之間的另一個區別是, SortedList<(Of <(TKey, TValue>)>) 支持通過操作鍵和返回 集合中的關鍵字和值的高效索引檢索 值屬性。當訪問 屬性時,不需要 重新生成列表,因爲 列表僅僅是 內部鍵和值的數組的封裝器。

兩個SortedDictionarySortedList實施IDictionary,所以我會得到一些測試數據和代碼探查一起,並嘗試。

如果兩者都不夠快,您可能需要開始考慮使用Dictionary(快速插入,更新和鍵查找)並手動維護第二個數據結構中的索引。

相關問題