лучший объект коллекции для FIFO и возможность просмотра предметов по позиции - PullRequest
1 голос
/ 02 июня 2009

Я ищу объект / стратегию коллекции, которая позволяет использовать FIFO и позволяет мне просматривать элементы в коллекции, просто указывая их положение. Для уточнения:

  1. Я хотел бы, чтобы эта структура данных содержала, скажем, 100 объектов DTO, а затем, когда она достигнет 101, я смогу освободить место, удалив первый элемент и т. Д. (FIFO).

  2. Я бы хотел иметь возможность вернуть новейший x # этих объектов при запросе.

Я пытался использовать объект очереди .Net, однако, насколько я могу судить, он не поддерживает # 2, хотя я мог что-то там пропустить.

Ответы [ 2 ]

2 голосов
/ 02 июня 2009

Нетрудно обернуть List и выполнить RemoveAt (0), когда вы хотите извлечь элемент из очереди. Это даст вам FIFO и позволит вам индексировать в любом месте. Вам, вероятно, следует обернуть его, чтобы защитить целостность очереди (только FIFO).

1 голос
/ 02 июня 2009

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

Enqueue будет записывать значение в readIndex, а затем устанавливать readIndex в ((readIndex + 1)% queueSize). Dequeue выдаст исключение, если readIndex == writeIndex, в противном случае получить значение в writeIndex, а затем увеличить writeIndex на ((writeIndex + 1)% queueSize). Если заглянуть в индекс очереди (из верхней части очереди, то есть элемента, который был поставлен в очередь последним), он будет возвращать элемент в ((queueSize + (readIndex - index))% queueSize).

...