我想构建一个字典(键,值),但我希望这个字典的大小有限,例如 1000 个条目,所以当我丰富这个限制大小时,我想删除第一个元素并添加一个新元素(FIFO) .
我想使用字典,因为我总是在字典中搜索键(我需要它会很快)
这个怎么做?
我想构建一个字典(键,值),但我希望这个字典的大小有限,例如 1000 个条目,所以当我丰富这个限制大小时,我想删除第一个元素并添加一个新元素(FIFO) .
我想使用字典,因为我总是在字典中搜索键(我需要它会很快)
这个怎么做?
要同时获取字典和 LIFO/FIFO 行为(用于删除最新/最旧条目),您可以使用OrderedDictionary
. 请参阅http://msdn.microsoft.com/en-us/library/system.collections.specialized.ordereddictionary.aspx。
为了方便使用,您可以OrderedDictionary
按照@ArsenMkrt 建议的方式从 派生您自己的类。
但是请注意,OrderedDictionary
它不使用泛型,因此由于装箱(字典中的项目将插入为object
)会导致效率低下。克服这个问题的唯一方法是创建一个双数据结构,将字典中的所有项目镜像到一个Queue
(对于 FIFO)或一个Stack
(对于 LIFO)。有关详细信息,请参阅“Qua”对以下 SO 问题的回答,该问题准确地处理了您需要一种有效方式来跟踪插入字典项的顺序的情况。
像这样从字典和 ovverride 添加方法派生
if(myDic.Count == MAXCOUNT - 1)
{
myDic.Remove(myDic[0]);
}
myDic.Add(key, item);
我不知道我们是否可以明确限制字典大小。有时回来我也想做同样的事情。
我通过编写一种方法解决了这个问题,该方法不断手动检查字典计数,当它的大小超过一定限制时,它会从字典中删除一些条目。