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.
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.
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.
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.
Tags und Links c# data-structures