C# 具有替换优先级的固定大小字典
我想要一本固定大小的字典。我正在以高频率向其添加元素。但我希望它能用以前的元素替换优先级更高的新元素。C# 具有替换优先级的固定大小字典,c#,dictionary,fixed,C#,Dictionary,Fixed,我想要一本固定大小的字典。我正在以高频率向其添加元素。但我希望它能用以前的元素替换优先级更高的新元素。 任何帮助都将受到高度欢迎 我想现在您不需要这个解决方案,但是您可以创建一个继承自IDictionary的类,并重写它的Add方法,以防止dictionary超出特定的大小 像这样的 class LimitedSizeDictionary<TKey, TValue> : IDictionary<TKey, TValue> { Dictionary<TKey, TV
任何帮助都将受到高度欢迎 我想现在您不需要这个解决方案,但是您可以创建一个继承自IDictionary的类,并重写它的Add方法,以防止dictionary超出特定的大小 像这样的
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;
}
}
class LimitedSizeDictionary:IDictionary
{
词典词典;
排队;
整数大小;
公共有限大小(整数大小)
{
这个。大小=大小;
dict=新字典(大小+1);
队列=新队列(大小);
}
公共无效添加(TKey键,TValue值)
{
dict.Add(键、值);
if(queue.Count==大小)
dict.Remove(queue.Dequeue());
queue.Enqueue(key);
}
公用门移除(TKey)
{
如果(指令移除(键))
{
Queue newQueue=新队列(大小);
foreach(队列中的TKey项)
如果(!dict.Comparer.Equals(项,键))
newQueue.Enqueue(项目);
queue=newQueue;
返回true;
}
其他的
返回false;
}
}
我想现在您不需要这个解决方案,但是您可以创建一个继承自IDictionary的类,并重写它的Add方法,以防止dictionary超出特定的大小
像这样的
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;
}
}
class LimitedSizeDictionary:IDictionary
{
词典词典;
排队;
整数大小;
公共有限大小(整数大小)
{
这个。大小=大小;
dict=新字典(大小+1);
队列=新队列(大小);
}
公共无效添加(TKey键,TValue值)
{
dict.Add(键、值);
if(queue.Count==大小)
dict.Remove(queue.Dequeue());
queue.Enqueue(key);
}
公用门移除(TKey)
{
如果(指令移除(键))
{
Queue newQueue=新队列(大小);
foreach(队列中的TKey项)
如果(!dict.Comparer.Equals(项,键))
newQueue.Enqueue(项目);
queue=newQueue;
返回true;
}
其他的
返回false;
}
}
您描述的数据结构不是字典-它是一个固定长度的队列。@MarcinJuraszek:但我需要向其中添加一对键,值,以后可以通过值检索。我需要的结构是一个哈希,但具有良好的替换strategy@MarcinJuraszek:我需要快速查找优先级是如何工作的?这是钥匙吗?或者每个数据对象都有类似的值、优先级和键?您描述的数据结构不是字典,而是一个固定长度的队列。@MarcinJuraszek:但我需要添加一对键,我需要的结构是一个哈希,但是有一个很好的替换strategy@MarcinJuraszek:我需要快速查找优先级是如何工作的?这是钥匙吗?或者每个数据对象都有相似的值、优先级和键?