2010-04-11 46 views
5

我需要一個類似於SortedDictionary<int, double>的數據結構,但是基於值而不是鍵來排序。當我們在字典中有大約3000個項目時,我需要大約1-2微秒來添加和刪除項目。.NET SortedDictionary但是按值排序

我的第一個想法是簡單地在我的代碼中切換鍵和值。這非常有效。我可以在測試中在大約1.2微秒的時間內添加和刪除元素。

但是,鍵必須在SortedDictionary中唯一,這意味着我的反向字典中的值必須是唯一的。有些情況下他們可能不會。

.NET庫中的某些東西的任何想法已經適用於我?

+0

我假設排序列表<>不符合,業績? – 2010-04-11 23:07:42

+0

你能解釋你的域名中的鍵和值代表什麼嗎? – 2010-04-11 23:09:42

+0

@Simon我認爲SortedList <>也是按鍵排序的。 http://msdn.microsoft.com/en-us/library/system.collections.sortedlist.aspx – 2010-04-12 00:38:00

回答

1

PowerCollections庫有一個名爲OrderedMultiDictionary<TKey, TValue>的類,基本上類似於SortedDictionary<TKey, TValue>,但允許重複。當你查找一個鍵時,你會得到一個枚舉值而不是單個值。

該庫是免費的,你應該能夠做到你想要的那個類 - 將值存儲爲密鑰。

+0

哇,太好了!讓我下載,看看它是否真的很快1-2。 – 2010-04-11 23:14:14

+0

注意:如果你不想使用這個庫,你總是可以用'SortedDictionary'來實現它,並且只需要一個'List '作爲值來代替單個'T'。 – Aaronaught 2010-04-11 23:14:46

+0

對於PowerCollections庫,添加/刪除大約需要30微秒左右。非常接近,但我不確定它是否足夠用於此應用。感謝指針,但。 SortedDictionary >也是一個好主意,讓我看看我能否做到這一點。我的另一個想法是隻使用SortedDictionary 添加一個小的隨機項.0000001左右,這將迫使我的值是唯一的,但不會影響結果。 – 2010-04-11 23:58:03

3

您可以像這樣按值排序SortedDictionary:

yourList.Sort(
    delegate(KeyValuePair<int, double> val1, 
    KeyValuePair<int, double> val2) 
    { 
     return val1.Value.CompareTo(val2.Value); 
    } 
); 
+0

創新。我喜歡。 – Armstrongest 2010-04-12 00:20:20