2013-04-02 9 views
8

Czy istnieje struktura danych nadająca się do mieszania danych, która da możliwość usunięcia najstarszego elementu?Słownik o ograniczonym rozmiarze, który usuwa najstarsze elementy?

Podejście, o którym teraz myślę, to posiadanie słownika i kolejki o szybkim wyszukiwaniu przy użyciu słownika i możliwość usuwania najstarszego elementu ze słownika za pomocą kolejki.

+0

Czy chcesz usunąć elementy inne niż najstarsze? Czy będziesz musiał przechowywać wiele elementów - innymi słowy, jak ważna jest wydajność w przypadku takich usunięć? –

+0

Jaki typ danych z tym potencjalnym zbiorem powinien być przechowywany ..? – MethodMan

+0

Aby usunąć najstarszy element, musisz ustawić rozmiar lub czas na ... –

Odpowiedz

10

Można użyć numeru OrderedDictionary. Zachowa to porządek reklamowy (w przeciwieństwie do SortedDictionary, który zostanie zamówiony przez klucze). Możesz wtedy usunąć pierwszy dostępny element, który byłby najstarszy.

+4

+1. Zauważ, że usunięcie pierwszego elementu to O (n), co może być ok, ponieważ pytanie nie określa żadnych wymagań czasowych dla tej operacji. –

+0

@AlexeiLevenkov - Dobra uwaga. Również do OP, jeśli optymalizacja jest kluczowa, może warto przetestować wielkości pojemności, aby zainicjować OrderedDictionary z http://www.dotnetperls.com/dictionary-optimization (chociaż artykuł odnosi się do standardowego zbioru Dictionary, zasada powinna nadal obowiązywać) – keyboardP

0

System.Collections.Generic.SortedList to tylko słownik sortujący według klucza. Jeśli klucz jest tymczasowy w jakimś sensie, możesz po prostu użyć RemoveAt, aby usunąć pierwszy element, gdy osiągniesz określony rozmiar, gdy chcesz dodać kolejny wpis.

Prawdopodobnie, ponieważ wspomniałeś Dictionary, prawdopodobnie nie masz klucza tymczasowego. Ale, Dictionary to tylko zbiór obiektów KeyValuePair<K,V>. Możesz więc posortować listę, na której wartość jest równa KeyValuePair<K,V>, a kluczem jest data/czas dodania elementu.

0

Ponieważ masz określone wymagania, mogę zaimplementować Słownik z kolejką/buforem za (np. Bufor cykliczny wymieniony w komentarzach).

OrderedDictionary jest dobrym wyborem i dobrym źródłem informacji na ten temat (nie chcę tego publikować tutaj, ale możesz go łatwo znaleźć) - potrzebujesz tylko czegoś lepszego niż ArrayList do przechowywania swoich elementów (i zrób pisownię) - ponieważ ciągle usuwasz "pierwszy".

Powiązane problemy