Autor Beitrag
DonC
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Di 25.11.08 13:35 
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:

ausblenden 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 user profile iconKha: C#-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Di 25.11.2008 um 14:07
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4795
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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.

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 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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