我有一个列表,我希望能够存储20个值。什么是删除旧值的好方法。一个更好的例子是,想象一下改变历史,我不能存储20个最新的变化,而旧的变化则会消失。
C#中是否有一个特殊的东西让我这样做,或者我必须自己制作或使用删除功能。
EDIT1:好吧,如何存储4000 - 10000个值,突然一个链表看起来很有吸引力。
EDIT2:循环列表很好但是我不希望能够循环我的旧值。
EDIT3:对于我的问题,随机访问不是太重要,但顺序访问是。
答案 0 :(得分:2)
使用队列。每次进入队列时检查size == 20.如果是,则出列/弹出一个元素
答案 1 :(得分:1)
听起来你在描述一个环形缓冲区。 How would you code an efficient Circular Buffer in Java or C#可能会有所帮助。
答案 2 :(得分:0)
没有可以处理的内置集合,但您可以轻松制作一个:
public class LimitedList<T> : List<T> {
public new void Add(T item) {
if (Count == 20) {
RemoveAt(0);
}
base.Add(item);
}
}
请注意,目前这仅处理使用Add
方法添加项目时的限制,而不是AddRange
和Insert
等其他方法。此外,正如SLask指出的那样,List<T>
类并不是专门用于继承的(虽然它没有标记为final
),因此更强大的实现将封装列表而不是继承它。
另请注意,删除大型列表中的第一个项目效率很低,但如果项目少于20个,则没有问题。如果你需要更大的集合,LinkedList会更好地处理它。
答案 3 :(得分:0)
您可以创建自己的列表类:
public class BoundedList<T> : Collection<T> {
public int MaxSize { get; private set; }
public BoundedList(int MaxSize) : base(new List<T>(maxSize)) {
MaxSize = maxSize;
}
protected override void InsertItem(T item, int index) {
base.InsertItem(item, index)
if (Count > MaxSize)
Remove(0);
}
}
答案 4 :(得分:0)
好吧,我终于有机会自己思考这个问题,并且在没有经过太多努力的情况下找到了一个很好的妥协。为什么不使用链表。
我想我没有提到随机访问并不太重要......