我需要与list类似的集合,而不是在达到特定长度时始终添加项目,它应该从第一个索引开始覆盖值并按循环顺序继续。
即。对于4项限制:
specialList.Add(100); // {100}
specialList.Add(101); // {100, 101}
specialList.Add(102); // {100, 101, 102}
specialList.Add(103); // {100, 101, 102, 103}
specialList.Add(104); // {104, 101, 102, 103}
specialList.Add(105); // {104, 105, 102, 103}
答案 0 :(得分:5)
(更新以显示常规列表类) 这是一个可用于特殊列表类的类,它在到达最后一个元素时循环(循环到第一个项目):
public class ListCycle<T> : IList<T>
{
int curIndex = -1;
List<T> list;
int nMax;
public ListCycle(int n)
{
list = new List<T>(n);
nMax = n;
}
/// <summary>returns the current index we are in the list</summary>
public int CurIndex { get { return curIndex; } }
public int IndexOf(T item) { return list.IndexOf(item); }
public bool Contains(T item) { return list.Contains(item); }
public int Count { get { return list.Count; } }
public bool IsReadOnly { get { return false; } }
public IEnumerator<T> GetEnumerator() { return list.GetEnumerator(); }
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return list.GetEnumerator(); }
public T this[int index]
{
get { return list[index]; }
set { list[index] = value; }
}
public void Add(T item)
{
curIndex++; if (curIndex >= nMax) curIndex = 0;
if (curIndex < list.Count)
list[curIndex] = item;
else
list.Add(item);
}
public void Clear()
{
list.Clear();
curIndex = -1;
}
//other mehods/properties for IList ...
public void Insert(int index, T item) { throw new NotImplementedException(); }
public bool Remove(T item) { throw new NotImplementedException(); }
public void RemoveAt(int index) { throw new NotImplementedException(); }
public void CopyTo(T[] array, int arrayIndex) { throw new NotImplementedException(); }
}
用法很简单:
var list = new ListCycle<int>(10);
//fill the list
for (int i = 0; i < 10; i++)
{
list.Add(i);
}
//now list is:
// 0, 1, 2, 3, ...
//add more items will start from first
list.Add(100); //overrides first item
list.Add(101); //overrides second item
//now list is:
// 100, 101, 2, 3, ...
答案 1 :(得分:4)
为什么不清除list
,然后开始添加项目,而不是覆盖list
。
按照以下方法
清除list
myList.Clear();
然后在list
myList.add(item);
修改强>
如果您想保留旧值,那么一旦list
填充了10个项目,立即在第一个索引处添加项目
myList[0] = (newItem);
此newItem
会覆盖list