キーとアイテムを格納できるリング リスト ディクショナリが必要です。Capacity = 50
最初のアイテムを追加#51
するときは、削除する必要があります。基本的には、リングリストのように振る舞う辞書でなければなりません。
それを行うことができる.NET Frameworkに何かありますか? それとも自分で書かなければなりませんか?
キーとアイテムを格納できるリング リスト ディクショナリが必要です。Capacity = 50
最初のアイテムを追加#51
するときは、削除する必要があります。基本的には、リングリストのように振る舞う辞書でなければなりません。
それを行うことができる.NET Frameworkに何かありますか? それとも自分で書かなければなりませんか?
組み込みのものは何も見つからないと思いますが、OrderedDictionaryを使用して簡単に実装できます
OrderedDictionary
挿入された順序でアイテムを維持します。制限/容量に達すると、最初のアイテムを削除できます。
これを試して:
class Program
{
static void Main(string[] args)
{
var rD = new RingDictionary(50);
for (int i = 0; i < 75; i++)
{
rD.Add(i, i);
}
foreach (var item in rD.Keys)
{
Console.WriteLine("{0} {1}", item, rD[item]);
}
}
}
class RingDictionary : OrderedDictionary
{
int indexKey;
int _capacity = 0;
public int Capacity
{
get { return _capacity; }
set
{
if (value <= 0)
{
var errorMessage = typeof(Environment)
.GetMethod(
"GetResourceString",
System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.NonPublic,
null,
new Type[] { typeof(string) },
null)
.Invoke(null, new object[] {
"ArgumentOutOfRange_NegativeCapacity"
}).ToString();
throw new ArgumentException(errorMessage);
}
_capacity = value;
}
}
public RingDictionary(int capacity)
{
indexKey = -1;
Capacity = capacity;
}
public new void Add(object key, object value)
{
indexKey++;
if (base.Keys.Count > _capacity)
{
for (int i = base.Keys.Count-1; i >Capacity-1 ; i--)
{
base.RemoveAt(i);
}
}
if (base.Keys.Count == _capacity)
{
base.RemoveAt(indexKey % _capacity);
base.Insert(indexKey % _capacity, key, value);
}
else
{
base.Add(key, value);
}
}
}