字典<>始终按值排序,从键查找索引

时间:2011-08-17 08:03:52

标签: c# dictionary sorted

我需要一个字典(或任何其他集合),它始终按值排序,并且可以按键索引。我的目的是实现一个缓存,其中对象具有唯一键和与之关联的度量。当必须完成缓存替换时,删除具有最小度量的对象。它需要尽可能快,所以每次更换时进行完整的订购并不是一个好的选择。有任何想法吗? THX

5 个答案:

答案 0 :(得分:3)

这样的事情应该可以正常工作(没有经过多少测试):

http://pastebin.com/eYeE33F5

答案 1 :(得分:0)

它接收优先级队列是您正在寻找的。使用二进制堆有很好的类实现。示例:http://www.codeproject.com/Articles/126751/Priority-queue-in-Csharp-with-help-of-heap-data-st.aspx

答案 2 :(得分:0)

为什么不保留常规字典。现在,只要您需要进行缓存替换,就可以选择具有“最小”值的元素并替换它。

编辑 - 以下是如何获得具有最小值的KeyPair。之后只需使用Key和Value属性:

var minValuePair = myDictionary.OrderBy(p => p .Value).First();

答案 3 :(得分:0)

您可以将任何类型的快速优先级队列(在此处查看:Priority queue in .Net)与标准词典组合到新的集合中。插入新元素时,将元素的引用插入到两个容器中。通过“key”查找元素时,请使用字典。当您要删除具有最低“度量”的元素时,使用优先级队列来查找它,从元素本身获取密钥,然后很容易从两个容器中删除元素引用。

答案 4 :(得分:0)

您想要一个按Value排序但也有Key索引的字典。您不能同时以两种方式排列数据,因此您必须拥有两个集合,即基本键值字典和反向查找字典。您的第一个是标准字典,第二个是SortedDictionary,具有相同的数据,并且交换了键和值。你必须保持两者同步。

你也可以编写自己的Dictionary实现来将这两个集合封装成一个。