具有替换优先级的固定大小字典

本文关键字:字典 替换 优先级 | 更新日期: 2023-09-27 18:22:38

我想要一个固定大小的字典。我正在以高频率添加元素。但我希望它用以前的元素替换优先级更高的新元素。任何帮助都将受到高度欢迎。

具有替换优先级的固定大小字典

我想现在你不需要这个解决方案,但你总是可以创建一个从IDictionary继承的类,并覆盖它的Add方法,以防止字典增长到特定大小的之外

像这样的

class LimitedSizeDictionary<TKey, TValue> : IDictionary<TKey, TValue>
{
 Dictionary<TKey, TValue> dict;
 Queue<TKey> queue;
 int size;
 public LimitedSizeDictionary(int size)
 {
 this.size = size;
 dict = new Dictionary<TKey, TValue>(size + 1);
 queue = new Queue<TKey>(size);
 }
 public void Add(TKey key, TValue value)
 {
 dict.Add(key, value);
 if (queue.Count == size)
 dict.Remove(queue.Dequeue());
 queue.Enqueue(key);
 }
 public bool Remove(TKey key)
 {
 if (dict.Remove(key))
 {
 Queue<TKey> newQueue = new Queue<TKey>(size);
 foreach (TKey item in queue)
 if (!dict.Comparer.Equals(item, key))
 newQueue.Enqueue(item);
 queue = newQueue;
 return true;
 }
 else
 return false;
 }
}