是否有可用于散列数据的现有数据结构能够删除最旧的元素?
我现在想到的方法是使用Dictionary快速查找字典和队列,并能够使用队列从Dictionary中删除最旧的元素。
答案 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 方法,所以如果要继承这个类,将不清楚使用的是哪个版本。一个更完整的解决方案将使用内部字典而不是继承,但这会更加冗长