Wörterbuch mit begrenzter Größe, das älteste Elemente entfernt?

8

Gibt es eine vorhandene Datenstruktur, die für Hashing-Daten geeignet ist und die Möglichkeit bietet, das älteste Element zu löschen?

Der Ansatz, an den ich gerade denke, ist, dass ein Dictionary und eine Warteschlange schnell nachschlagen und das älteste Element aus dem Dictionary mit Hilfe einer Warteschlange löschen können.

    
Nickolay Kondratyev 02.04.2013, 00:18
quelle

3 Antworten

10

Sie können ein OrderedDictionary verwenden. Dadurch wird die Reihenfolge der Anzeigen beibehalten (im Gegensatz zu SortedDictionary , die mit Schlüsseln bestellt werden). Sie können dann das erste verfügbare Element entfernen, das als das älteste gilt.

    
keyboardP 02.04.2013, 00:41
quelle
0

System.Collections.Generic.SortedList ist nur ein Wörterbuch, das nach Schlüssel sortiert. Wenn der Schlüssel in irgendeiner Weise temporal ist, können Sie einfach RemoveAt verwenden, um das erste Element zu entfernen, wenn Sie eine bestimmte Größe erreichen, wenn Sie einen weiteren Eintrag hinzufügen möchten.

Wahrscheinlich haben Sie, da Sie Dictionary erwähnt haben, wahrscheinlich keinen temporären Schlüssel. Aber ein Dictionary ist nur eine Sammlung von KeyValuePair<K,V> -Objekten. Sie könnten also eine sortierte Liste haben, deren Wert ein KeyValuePair<K,V> ist, und der Schlüssel ist das Datum / die Uhrzeit, zu der das Element hinzugefügt wurde.

    
Peter Ritchie 02.04.2013 00:44
quelle
0

Da Sie eine bestimmte Anforderung haben, würde ich das implementieren Dictionary mit einer Queue / Buffer hinter (z. B. Ringpuffer in Kommentaren erwähnt).

OrderedDictionary ist eine gute Wahl und eine gute Quelle, um das zu tun (ich möchte es hier nicht veröffentlichen, aber Sie können es leicht finden) - Sie brauchen nur etwas Besseres als eine ArrayList, um Ihre Elemente zu halten (und tun die Dequeueing) - da Sie ständig die "erste" entfernen.

    
NSGaga 02.04.2013 01:13
quelle

Tags und Links