Я получаю события и хочу отслеживать последние N событий, и для любого нового события подсчитывать, сколько раз подобные события происходили в прошлом (это, как правило, случается не часто).
Таким образом, мне нужно что-то с семантикой очереди (shift / push), а также с быстрым поиском по ключу, который НЕ является порядком вставки.
Мое текущее решение, когда мы заботимся только о подсчете, этосохранить как массив событий, так и хэш счетчиков, чтобы я мог увеличивать соответствующий счетчик на толчках и уменьшать его на сменах.Но это не позволяет мне отслеживать больше, чем количество, и неудобно обобщать.
Другой возможностью было размещение событий в поколениях хэш-таблиц K + 1, содержащих события N / K, отслеживаниепорядок вставки и отбрасывать самую старую таблицу, когда самая новая заполняется.Это дает мне компромисс между очередью с постоянным сдвигом / нажатием и линейным поиском (когда K = N), и более быстрым поиском за счет не более чем вдвое большей памяти (K = 1).
Я думаю, что-токак связанная хэш-таблица будет иметь немного лучшее поведение.Существует ли это или что-то с эквивалентной семантикой в Perl?