删除最旧元素的大小有限的字典?

时间:2013-04-02 00:18:54

标签: c# data-structures

是否有可用于散列数据的现有数据结构能够删除最旧的元素?

我现在想到的方法是使用Dictionary快速查找字典和队列,并能够使用队列从Dictionary中删除最旧的元素。

4 个答案:

答案 0 :(得分:10)

您可以使用OrderedDictionary。这将保持插入顺序(与将按键排序的SortedDictionary不同)。然后,您可以删除将被视为最旧的第一个可用元素。

答案 1 :(得分:0)

System.Collections.Generic.SortedList只是一个按键排序的字典。如果密钥在某种程度上是暂时的,那么当您想要添加另一个条目时,只需使用RemoveAt即可在达到特定大小时删除第一个元素。

可能,既然你提到了Dictionary,你可能没有临时密钥。但是,Dictionary只是KeyValuePair<K,V>个对象的集合。因此,您可以拥有一个排序列表,其中值为KeyValuePair<K,V>,键是添加元素的日期/时间。

答案 2 :(得分:0)

由于您有特定要求,我会实施 后面有队列/缓冲区的字典(例如评论中提到的循环缓冲区)。

OrderedDictionary是一个很好的选择,也是一个很好的选择(我不想在这里发布,但你可以很容易地找到它) - 你只需要比ArrayList更好的东西来保存你的元素(并且做出队) - 因为你经常删除'第一'。

答案 3 :(得分:0)

OrderedDictionary 是一个很好的建议,但如果您需要字典中的字符串以外的类型,请尝试此操作;

window.bashEmulator = require('./index')

我使用的是密封类,因为我们只是隐藏了 add 和 remove 方法,所以如果要继承这个类,将不清楚使用的是哪个版本。一个更完整的解决方案将使用内部字典而不是继承,但这会更加冗长