Entwickler-Ecke
Basistechnologien - Hashtable durchlaufen
DonC - Di 25.11.08 13:35
Titel: Hashtable durchlaufen
Hi,
ich habe ein Problem mit dem Durchlaufen einer Hashtable. Ich möchte, dass die Wertpaare der Hashtable in genau der Reihenfolge ausgegeben werden, wie sie ursprünglich hinzugefügt werden. Dies habe ich mit folgendem Code versucht:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Hashtable table = new Hashtable();
table.Add("2", "Test1"); table.Add("3", "Test2"); table.Add("1", "Test3"); table.Add("5", "Test4"); table.Add("6", "Test5");
foreach(DictionaryEntry obj in table) { MessageBox.Show(obj.Key.ToString()); } |
Eigentlich sollten in der foreach-Schleife die Keys ja nun in der Reihenfolge 2 3 1 5 6 ausgegeben werden. Werden sie aber nicht.
Stattdessen lautet die Reihenfolge 3 1 6 5 2. Wieso ist das so und wie kann man erreichen, dass die Werte in genau der Reihenfolge ausgegeben werden, wie sie hinzugefügt worden sind?
Wär super, wenn Ihr mir helfen könntet.
Gruß,
Chris
Moderiert von
Kha: C#-Tags hinzugefügtModeriert von
Christian S.: Topic aus C# - Die Sprache verschoben am Di 25.11.2008 um 14:07
Th69 - Di 25.11.08 14:22
Das wirst du mit einer HashTable nicht erreichen, da diese die Daten immer sortiert vorhält.
Nimm stattdessen dann eine generische List<>.
JüTho - Di 25.11.08 14:28
Hallo,
das ist offensichtlich eine Eigenart der Hashtable. Das Beispiel in der
SDK-Doku/MSDN unter "Informationen zur
Hashtable-Klasse" hat eine genauso verwirrende Ausgabe. Außerdem entspricht die Sortierung sowieso nicht der Eingabe, sondern dem Schlüssel (und das sind bei Dir Strings):
| Zitat: |
| Stellt eine Auflistung von Schlüssel-Wert-Paaren dar, die nach dem Hashcode des Schlüssels organisiert sind. |
Da aus dem Schlüssel ein
Hashcode erzeugt wird, hat die Reihenfolge eine andere Bedeutung, die so nicht vorhergesagt werden kann.
Unter anderem deshalb wurde vermutlich das
Dictionary<T, U> eingeführt. Vielleicht befasst Du Dich einmal mit
[Artikel] Grundlegendes zu Hashtable/Dictionary [
http://www.mycsharp.de/wbb2/thread.php?threadid=5954].
Gruß Jürgen
PS. Code kann gekennzeichnet werden: Unter "Bereiche" das C# auswählen und das Plus anklicken. Das kannst Du auch nachträglich erledigen (sofern nicht ein Moderator schneller ist).
PS2. Die Antwort von Th69 kam, während ich meinen Beitrag geschrieben habe. Wenn dahinter eine Liste von speziellen Objekten (einer gemeinsamen Klasse) liegt, kann er recht haben. Wenn es um Key-Value-Paare geht, ist Dictionary das Mittel der Wahl.
DonC - Di 25.11.08 15:09
Hi,
also ich hab das ganze jetzt mit Dictionary realisiert und es klappt wunderbar.
Besten Dank noch einmal :)
Gruß,
Chris
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!