c#有限词典

c#有限词典,c#,dictionary,fifo,C#,Dictionary,Fifo,我想建立一个字典(键,值), 但我希望这本字典的大小有限, 例如1000个条目, 因此,当我丰富这个限制大小时,我想删除第一个元素并添加一个新元素(FIFO) 我想使用字典,因为我总是在字典中搜索关键字(我需要它会很快) 如何做到这一点?派生自dictionary和ovverride添加方法,如下所示 if(myDic.Count == MAXCOUNT - 1) { myDic.Remove(myDic[0]); } myDic.Add(key, item); 我不知道我们是否能明确

我想建立一个字典(键,值), 但我希望这本字典的大小有限, 例如1000个条目, 因此,当我丰富这个限制大小时,我想删除第一个元素并添加一个新元素(FIFO)

我想使用字典,因为我总是在字典中搜索关键字(我需要它会很快)


如何做到这一点?

派生自dictionary和ovverride添加方法,如下所示

if(myDic.Count == MAXCOUNT - 1)
{
    myDic.Remove(myDic[0]);
}
myDic.Add(key, item);

我不知道我们是否能明确限制字典的大小。以前的某个时候,我也想这么做


我通过编写一个方法来解决这个问题,该方法不断手动检查字典计数,当其大小超过一定限制时,它将从字典中删除一些条目。

要同时获得字典和后进先出/先进先出行为(用于删除最新/最旧的条目),可以使用
有序字典。看

为了便于使用,您可以按照@ArsenMkrt建议的思路,从
OrderedDictionary
派生自己的类

但是,请注意,
OrderedDictionary
不使用泛型,因此由于装箱(字典中的项将作为
对象插入
)会导致效率低下。克服这一问题的唯一方法是创建一个双重数据结构,该结构将字典中的所有项镜像到一个
队列中(对于FIFO),或镜像到一个
堆栈中(对于LIFO)。有关详细信息,请参见以下SO问题的“Qua”答案,该问题正好解决了您需要一种有效方法跟踪字典项插入顺序的情况


如果新添加的项目得到索引0怎么办?或者之前添加的项目,因为您在添加之前删除了?这是要求,不是吗?@ArsenMrkt我不确定要求是什么。OP说他想删除“第一”项。但这并不是第一件被输入字典的事情。删除零位项目既不是后进先出,也不是先进先出。我已要求OP澄清。简单字典本身没有“排序”的概念,因此如果我添加1、2、3、4,然后再添加5,如果限制为4,我希望删除1。但是,如果字典在位置0中以4结尾,则该位置将被删除。当然,如果您可以使用一个简单的索引器(通常无法)将字典内容编入索引,那么您可以说希望在达到大小限制时删除第一个元素。你是说词典里的第一项吗?在这种情况下,你有先进先出的行为,而不是后进先出。还是要删除索引位置0处的项?删除位置0处的项目既不是后进先出,也不是先进先出。在这种情况下,请参阅我的答案。我认为其他任何答案都不能处理FIFO。