myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » "First in, first out" Hashtable
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

"First in, first out" Hashtable

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Fabian Fabian ist männlich
myCSharp.de-Mitglied

avatar-1590.jpg


Dabei seit: 09.12.2004
Beiträge: 1.985
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Dortmund


Fabian ist offline

"First in, first out" Hashtable

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
Neuer Beitrag 29.03.2006 12:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Programmierhans
myCSharp.de-Poweruser/ Experte

avatar-1651.gif


Dabei seit: 05.04.2005
Beiträge: 4.221
Entwicklungsumgebung: VS2003-VS2013 / SAP WebIDE
Herkunft: Zentralschweiz


Programmierhans ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Guckst Du die Queue - Klasse
Neuer Beitrag 29.03.2006 12:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Fabian Fabian ist männlich
myCSharp.de-Mitglied

avatar-1590.jpg


Dabei seit: 09.12.2004
Beiträge: 1.985
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Dortmund

Themenstarter Thema begonnen von Fabian

Fabian ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 smile .

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
Neuer Beitrag 29.03.2006 13:06 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Programmierhans
myCSharp.de-Poweruser/ Experte

avatar-1651.gif


Dabei seit: 05.04.2005
Beiträge: 4.221
Entwicklungsumgebung: VS2003-VS2013 / SAP WebIDE
Herkunft: Zentralschweiz


Programmierhans ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
Neuer Beitrag 29.03.2006 13:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Fabian Fabian ist männlich
myCSharp.de-Mitglied

avatar-1590.jpg


Dabei seit: 09.12.2004
Beiträge: 1.985
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Dortmund

Themenstarter Thema begonnen von Fabian

Fabian ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Programmierhans,

Zitat:
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
Neuer Beitrag 29.03.2006 13:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
svenson svenson ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.04.2005
Beiträge: 8.746
Entwicklungsumgebung: Visual Studio .NET 2003
Herkunft: Berlin


svenson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
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.
Neuer Beitrag 29.03.2006 14:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Fabian Fabian ist männlich
myCSharp.de-Mitglied

avatar-1590.jpg


Dabei seit: 09.12.2004
Beiträge: 1.985
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Dortmund

Themenstarter Thema begonnen von Fabian

Fabian ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo svenson,

Zitat:
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
Neuer Beitrag 29.03.2006 14:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
svenson svenson ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.04.2005
Beiträge: 8.746
Entwicklungsumgebung: Visual Studio .NET 2003
Herkunft: Berlin


svenson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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....
Neuer Beitrag 29.03.2006 14:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Fabian Fabian ist männlich
myCSharp.de-Mitglied

avatar-1590.jpg


Dabei seit: 09.12.2004
Beiträge: 1.985
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Dortmund

Themenstarter Thema begonnen von Fabian

Fabian ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
Neuer Beitrag 29.03.2006 14:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
svenson svenson ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.04.2005
Beiträge: 8.746
Entwicklungsumgebung: Visual Studio .NET 2003
Herkunft: Berlin


svenson ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
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).
Neuer Beitrag 29.03.2006 15:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Fabian Fabian ist männlich
myCSharp.de-Mitglied

avatar-1590.jpg


Dabei seit: 09.12.2004
Beiträge: 1.985
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Dortmund

Themenstarter Thema begonnen von Fabian

Fabian ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo svenson,

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

Nützt ja alles nichts smile .


Gruß,
Fabian
Neuer Beitrag 29.03.2006 15:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 13 Jahre.
Der letzte Beitrag ist älter als 13 Jahre.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 13.11.2019 17:48