我需要一个字典(或任何其他集合),它始终按值排序,并且可以按键索引。我的目的是实现一个缓存,其中对象具有唯一键和与之关联的度量。当必须完成缓存替换时,删除具有最小度量的对象。它需要尽可能快,所以每次更换时进行完整的订购并不是一个好的选择。有任何想法吗? THX
答案 0 :(得分:3)
这样的事情应该可以正常工作(没有经过多少测试):
答案 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实现来将这两个集合封装成一个。