2013-07-16 28 views
0

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

+0

您描述的数据结构不是字典 - 它是固定长度队列。 – MarcinJuraszek

+0

@MarcinJuraszek:但我需要添加一对钥匙,价值它,以后可以通过值检索 – Masoud

+0

我需要的结构是一个哈希,但具有良好的替代策略 – Masoud

回答

0

我想现在你不需要解决办法,但你总是可以创建一个从IDictionary中继承一个类并重写它的添加方法,以防止字典从增长超过特定大小这样

东西

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; 
} 
}