Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有替换优先级的固定大小字典_C#_Dictionary_Fixed - Fatal编程技术网

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:我需要快速查找优先级是如何工作的?这是钥匙吗?或者每个数据对象都有相似的值、优先级和键?