c # ограниченный словарь - PullRequest
5 голосов
/ 28 апреля 2011

Я хочу создать словарь (ключ, значение), но я хочу, чтобы этот словарь имел ограниченный размер, например 1000 записей, поэтому, когда я увеличиваю этот предельный размер, я хочу удалить первый элемент и добавить новый элемент(FIFO).

Я хочу использовать словарь, потому что я всегда ищу ключи в словаре (мне нужно, чтобы это было быстро)

Как это сделать?

Ответы [ 3 ]

6 голосов
/ 28 апреля 2011

Чтобы получить словарь и поведение LIFO / FIFO (для удаления самой новой / самой старой записи), вы можете использовать OrderedDictionary.См. http://msdn.microsoft.com/en-us/library/system.collections.specialized.ordereddictionary.aspx.

Чтобы сделать это удобным для использования, вы можете получить свой собственный класс из OrderedDictionary в соответствии с рекомендациями @ArsenMkrt.

Обратите внимание, однако, что OrderedDictionary не использует Generics, поэтому будет некоторая неэффективность из-за бокса (элементы в словаре будут вставлены как object).Единственный способ преодолеть это - создать двойную структуру данных, в которой все элементы в словаре будут зеркально отображены в Queue (для FIFO) или Stack (для LIFO).Подробнее см. Ответ «Qua» на следующий вопрос SO, который касается именно ситуации, когда вам нужен эффективный способ отслеживать порядок, в котором были вставлены элементы словаря.

Самый быстрый исамый эффективный тип коллекции в C #

3 голосов
/ 28 апреля 2011

Извлечь из словаря и добавить метод ovverride, как это

if(myDic.Count == MAXCOUNT - 1)
{
    myDic.Remove(myDic[0]);
}
myDic.Add(key, item);
0 голосов
/ 28 апреля 2011

Я не знаю, можем ли мы явно ограничить размер словаря. Некоторое время назад я хотел сделать то же самое.

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

...