.NET中是否有特定的集合类型,允许存储有限数量的对象并自动删除最旧的元素?实现此类“最近文件”功能的最简单方法是什么?
答案 0 :(得分:3)
您可能想尝试System.Collections.Queue?
每次将对象添加到队列(Enqueue()
)之前,都可以检查Count
以确定是否需要删除最旧的对象(Dequeue()
)。 / p>
答案 1 :(得分:2)
我会选择一个包含链表的类。有关起点的快速而肮脏的示例,请参阅下面的代码。当然,您需要添加其他访问者等。这将使您能够将最近访问的项目移动到列表的头部等。
public class RecentList<T> : IEnumerable<T>
{
private LinkedList<T> _list = new LinkedList<T>();
private int _maxItems;
public RecentList(int maxItems)
{
_maxItems = maxItems;
}
public void Add(T item)
{
_list.AddFirst(item);
if (_list.Count > _maxItems)
{
_list.RemoveLast();
}
}
public IEnumerator<T> GetEnumerator()
{
return _list.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return _list.GetEnumerator();
}
}
答案 2 :(得分:1)
您可能对LRU cache实施感兴趣,因为Queue不会为您提供简单的查找功能。
编辑:对于仅提供“最近的文件”功能,LRU缓存将是过度的 - 与其他海报建议一样使用简单的队列。