Тип коллекции .NET для хранения недавнего списка - PullRequest
2 голосов
/ 03 октября 2010

Существует ли в .NET определенный тип коллекции, который позволяет хранить ограниченное количество объектов и автоматически удалять самый старый элемент? Какой самый простой способ реализовать такую ​​функцию «Недавние файлы»?

Ответы [ 3 ]

3 голосов
/ 03 октября 2010

Возможно, вы захотите попробовать System.Collections.Queue ?

Каждый раз, прежде чем добавить объект в свою очередь (Enqueue()), вы можете проверить Count, чтобы решить, нужно ли удалять самый старый объект (Dequeue()).

2 голосов
/ 03 октября 2010

Я бы пошел с классом, обертывающим связанный список. Для быстрого и грязного примера для начала см. Код ниже. Конечно, вы захотите добавить другие средства доступа и т. Д. Это даст вам возможность перемещать недавно использованные элементы в начало списка и т. Д.

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();
  }
}
1 голос
/ 03 октября 2010

Возможно, вы заинтересованы в реализации LRU кеша , поскольку очередь не даст вам возможности простого поиска.

РЕДАКТИРОВАТЬ: просто предлагая функциональность "Недавние файлы" кеш LRUбыло бы излишним - иди с простой очередью, как предложил другой плакат.

...