Hãy thử điều này:
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);
}
}
}
Nguồn
2013-08-06 11:00:17
Bạn sẽ phải để tự mình viết. Chỉ cần sử dụng danh sách được liên kết và từ điển bên dưới. –
Giống như Haris Hasan đã nói, bạn có thể sử dụng OrderedDictionary. Nó không phải là lớp niêm phong, vì vậy bạn có thể kế thừa từ nó và viết định nghĩa phương thức 'Insert' mới (http://msdn.microsoft.com/en-us/library/435f1dw2.aspx). Thật không may, nó không quan trọng nhưng bạn có thể sử dụng lớp học của bạn explicity. –