我想要一本固定大小的字典。我正在向它添加高频元素。但我希望它用以前的元素替换具有更高优先级的新元素。任何帮助都将受到高度欢迎。
问问题
1971 次
1 回答
1
我想现在你不需要解决方案,但你总是可以创建一个继承自 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;
}
}
于 2014-08-28T20:08:16.650 回答