2010-04-11 19 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