1

固定サイズの辞書が必要です。高い頻度で要素を追加しています。しかし、優先度の高い新しい要素を以前の要素に置き換えたいと思います。どんな助けでも大歓迎です。

4

1 に答える 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 に答える