Laden...

"First in, first out" Hashtable

Erstellt von Fabian vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.778 Views
Fabian Themenstarter:in
1.985 Beiträge seit 2004
vor 18 Jahren
"First in, first out" Hashtable

Hallo zusammen,

ich habe da eine Frage an Euch: Ich füge in einer Schleife mehrere Einträge zu einer Hashtable hinzu (lese diese aus einer Datei).

Jetzt möchte ich, dass diese Einträge einfach unsortiert und auch nicht, wie es für eine Hashtable üblich ist, nach den Hashes der Keys organisiert, in diese Liste eingefügt werden.

Also im Prinzip sowas wie "First in, first out". Wenn ich die Elemente "Sektion1", "Sektion2" und "Sektion3" hinzufüge, dann sollen die beim Durchgehen der Liste auch genauso wieder rausgeschrieben werden können.

Die Hashtable organisiert das ganze ja nach Hashes und die SortedList ist alphabetisch sortiert, also beides nicht so ganz das, was ich will.

Wie kann/sollte ich mein Vorhaben am besten umsetzen (könnte ich theoretisch meinen eigenen Comparer schreiben und beim Instanziieren mit übergeben und den einfach nicht sortieren lassen? Oder geht das noch einfacher?)?

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

4.221 Beiträge seit 2005
vor 18 Jahren

Guckst Du die Queue - Klasse

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

Fabian Themenstarter:in
1.985 Beiträge seit 2004
vor 18 Jahren

Hallo Programmierhans,

hört sich eigentlich nicht schlecht an. Allerdings bräuchte ich Zugriff mittels Key, weil bei der Bearbeitung direkt auf ein Schlüssel zugegriffen werden muss.

Das hätte ich vielleicht erwähnen sollen, da es die ganze Sache doch schon anders aussehen lässt 🙂.

Ich brauche also direkten Zugriff auf einen Key, doch beim Auslesen sollen die Elemente im "First in, first out"-Verfahren ausgelesen werden können.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

4.221 Beiträge seit 2005
vor 18 Jahren

Dann mach Dir doch eine Klasse welche deine Datenklasse hält

Pseudocode:

private string _KeyOfThisDataObject;
private DeinDataType _Data;

public Properties ... welche auf die Variablen verweisen....

Diese Klasse packst Du dann in die Queue

Du ziehst immer das nächste Teil aus der Queue ... und kannst dann den Key abfragen... hoffe Du verstehst was ich meine.

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

Fabian Themenstarter:in
1.985 Beiträge seit 2004
vor 18 Jahren

Hallo Programmierhans,

Original von Programmierhans
[...] hoffe Du verstehst was ich meine.

Jep, verstanden habe ich es. Bin nur noch am Grübeln, ob die Lösung für mich in Frage kommt. Eigentlich aber schon.

Werde ich mir mal genauer überlegen.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

S
8.746 Beiträge seit 2005
vor 18 Jahren

Original von Fabian
Ich brauche also direkten Zugriff auf einen Key, doch beim Auslesen sollen die Elemente im "First in, first out"-Verfahren ausgelesen werden können.

Das kannst du logischerweise nur dann machen, indem du zwei Collections auf einmal einsetzt. Einmal ein FIFO (Queue) und eben eine Hashtable. Eine Collection speichert die Information der Reihenfolge, die andere erlaubt den Direktzugriff via Key.

Fabian Themenstarter:in
1.985 Beiträge seit 2004
vor 18 Jahren

Hallo svenson,

Original von svenson
Das kannst du logischerweise nur dann machen, indem du zwei Collections auf einmal einsetzt. Einmal ein FIFO (Queue) und eben eine Hashtable. Eine Collection speichert die Information der Reihenfolge, die andere erlaubt den Direktzugriff via Key.

Hast Du natürlich Recht! Auf der anderen Seite ist das Synchronisieren der beiden Collections wieder aufwändiger, weil ich beim direkten Zugriff in der Hashtable diesen Eintrag in der Queue erstmal finden muss, um dann die Aktualisierung etc. duchzuführen.

Jetzt noch eine andere Frage: Der Comparer, den ich dem Konstruktur einer SortedList übergeben kann, wird doch für die Sortierung der Elemente benutzt oder? Wenn ich da einen Comparer übergebe, der zwar die Sortiermethode implementiert, intern aber gar nicht sortiert, sollte ich doch das gleiche Ergebnis erhalten oder?

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

S
8.746 Beiträge seit 2005
vor 18 Jahren

Der Comparer implementiert nur eine Vergleichsmethode (IComparable.CompareTo), also keine Sortierung sondern nur eine Sortierreihenfolge.

Wenn du nicht Sortieren willst, dann ruf doch einfach Sort() gar nicht auf....

Fabian Themenstarter:in
1.985 Beiträge seit 2004
vor 18 Jahren

Hallo svenson,

ich meinte die Vergleichsmethode (IComparable.CompareTo). Die gibt doch, wenn ich mich recht erinnere, -1, 0 oder 1 zurück. Je nach dem, in welcher Reihenfolge sich das aktuelle zum vorherigen Element befindet oder (und natürlich in Abhängigkeit des eigentlichen Vergleichs, den man implementiert)?

War ich aber glaube ich auf dem Holzweg, denn ich wüsste nicht, wie ich das dahingehend benutzen kann, dass die Einträge nicht sortiert sondern einfach angehangen werden.

Die Sort-Methode habe ich gar nicht aufgerufen, sondern einfach nur die SortedList instanziiert. Die scheint per Default alphabetisch zu sortieren.

Ich seh' schon, ich komme um diese zwei Collections wahrscheinlich nicht drum rum.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

S
8.746 Beiträge seit 2005
vor 18 Jahren

Original von Fabian
Je nach dem, in welcher Reihenfolge sich das aktuelle zum vorherigen Element befindet oder (und natürlich in Abhängigkeit des eigentlichen Vergleichs, den man implementiert)?

Definiere voriges Element. Sicher basiert jeder Sortieralgorithmus auf einem Vergleich, aber welches Element mit welchem verglichen wird, ist je nach Algorithmus verschieden.

Bei der SortedList dürfte z.B. ein neu einzufügendes Element zuerst mit dem mittleren Element verglichen werden (binäre Suche).

Fabian Themenstarter:in
1.985 Beiträge seit 2004
vor 18 Jahren

Hallo svenson,

auch wieder wahr! Nun gut, dann werde ich wohl entweder den Vorschlag von Programmierhans oder Deinen umsetzen.

Nützt ja alles nichts 🙂.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de