Entwickler-Ecke
WinForms - Anzeige von Dictionary-Values in textBox
dubstep - Mi 27.04.11 16:39
Titel: Anzeige von Dictionary-Values in textBox
Ich habe schon beinahe alle Kombinationen durch, aber leider finde ich den Fehler nicht. :?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Dictionary<int,int[]> Adjazenzliste = new Dictionary<int, int[]>(); Adjazenzliste.Add(001, new int[]{015, 030}); foreach(int[] aa in Adjazenzliste.Values) { textBox4.AppendText(Convert.ToString(aa)); } |
Ausgabe: System.Int32[]
Nimmt man kein Array oder List<T> als Value beim Dictionary, so funktioniert das Auslesen ohne Probleme ... leider wird aber eine solche Datenstruktur benötigt.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Dictionary<int,int> Adjazenzliste = new Dictionary<int, int>(); Adjazenzliste.Add(001, 030);
foreach(int aa in Adjazenzliste.Values) { textBox4.AppendText(Convert.ToString(aa)); } |
Ausgabe: 30
Vielen Dank für eure Hilfe!
bakachan - Mi 27.04.11 16:56
Ein Integer-Array kannst du nicht einfach in einen String umwandeln aber du kannst ja auch das Array durchlaufen und die einzelnen Werte verwenden.
C#-Quelltext
1: 2: 3: 4: 5:
| foreach(int[] aa in Adjazenzliste.Values) foreach(int value in aa) { textBox4.AppendText(value.ToString()); } |
dubstep - Mi 27.04.11 21:25
Danke! :lol:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Dictionary<int,int[]> Adjazenzliste = new Dictionary<int, int[]>(); Adjazenzliste.Add(001, new int[] {000, 010, 020, 030});
foreach(int[] aa in Adjazenzliste.Values) { for (int i = 0; i < 4; i++) { textBox4.AppendText((Convert.ToString(aa[i])) + "\n"); } } |
Gibt es eine Möglichkeit, die 000 nicht als 0 darzustellen, sondern mit den ganzen drei Ziffern (also Darstellung als 000)?
Dr. Hallo - Mi 27.04.11 23:52
so vielleicht?
aa[i].ToString("000")
dubstep - Do 28.04.11 00:36
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Adjazenzliste.Add(Convert.ToInt32(textBoxGhost.Text.Substring(0, 3)), new int[] { 100, 101}); Adjazenzliste.Add(Convert.ToInt32(textBoxGhost.Text.Substring(3, 3)), new int[] { 100, 101, 201, 301});
foreach(int[] aa in Adjazenzliste.Values) { for (int i = 0; i < 4; i++) { textBox4.AppendText((Convert.ToString(aa[i])) + "\n"); } } |
Durch das Durchlaufen des Arrays mit dieser zusätzlichen for-Schleife benötige ich den Index "i", welcher die Größe des jeweiligen Arrays verlangt. Genau dieser Index bereitet mir nun Kopfzerbrechnen, da ich Arrays unterschiedlicher Länge (siehe oben - z.B. einmal ein Array mit Länge 2 und ein Array mit Länge 4) habe. Die Funktion ".Length" darf hier leider nicht zur Anwendung kommen. Im Prinzip soll der Index i genau so viele Zähler haben, wie das Array (man hat ja mehrere Arrays mit unterschiedlicher Länge) lange ist. :(
Bin für jeden Vorschlag dankbar ...!
jaenicke - Do 28.04.11 07:58
Ohne die Länge des Arrays abzufragen kannst du nicht alle Indizes durchgehen, weil du ganz einfach nicht weißt was "alle" sind.
Was hast du denn gegen die vorgeschlagene Lösung mit einer weiteren for..in Schleife?
bakachan - Do 28.04.11 08:00
Dafür hast du nur 2 Möglichkeiten die hier beide schon genannt wurden.
Eine hast du selbst genannt "Length" und die andere hast du in meinem Beispiel gesehen "foreach".
Dr. Hallo - Do 28.04.11 13:24
wenn du auf dein i nicht verzichten darfst, kannst du den indexfehler mit try catch abfangen und mit break die innere schleife verlassen. was aber eher die rabiate methode ist.
dubstep - Fr 29.04.11 01:53
Mit diesem Code ist es mir möglich, die Länge des Arrays zu erfragen - das klappt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| foreach (int[] aa in Adjazenzliste.Values) { if (aa.Length == 1) { textBox5.AppendText("1"); }
if (aa.Length == 3) { textBox5.AppendText("3"); }
if (aa.Length == 2) { textBox5.AppendText("2"); }
if (aa.Length == 4) { textBox5.AppendText("4"); } } |
Leider ist jeder Versuch das nun zu integrieren gescheitert: Hier erhalte ich zwar eine Ausgabe, diese ist aber nicht richtig ...
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| foreach (KeyValuePair<int, int[]> cc in Adjazenzliste) { textBox4.AppendText(Convert.ToString(cc.Key) + ": ");
foreach (int[] aa in Adjazenzliste.Values) { for (int j = 0; j < aa.Length-1; j++) { textBox4.AppendText(Convert.ToString(cc.Value[j] + "; ")); } textBox4.AppendText("\n"); } } |
jaenicke - Fr 29.04.11 05:58
Da standen doch schon fertige Vorschläge, ich verstehe nicht wo jetzt das Problem liegt?
Bei dir jedenfalls passt da was nicht zusammen:
dubstep hat folgendes geschrieben : |
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| foreach (KeyValuePair<int, int[]> cc in Adjazenzliste) { textBox4.AppendText(Convert.ToString(cc.Key) + ": ");
foreach (int[] aa in Adjazenzliste.Values) { for (int j = 0; j < aa.Length-1; j++) { textBox4.AppendText(Convert.ToString(cc.Value[j] + "; ")); } textBox4.AppendText("\n"); } } | |
:?!?:
Außerdem bist du wohl bei der Klammersetzung durcheinander gekommen...
dubstep hat folgendes geschrieben : |
C#-Quelltext 1:
| textBox4.AppendText(Convert.ToString(cc.Value[j] + "; ")); | |
:?!?:
Also nochmal:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| foreach (KeyValuePair<int, int[]> cc in Adjazenzliste) { textBox4.AppendText(Convert.ToString(cc.Key) + ": ");
foreach (int[] aa in Adjazenzliste.Values) { for (int j = 0; j < aa.Length-1; j++) { textBox4.AppendText(aa[j].ToString("000") + "; "); } textBox4.AppendText("\n"); } } |
oder:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| foreach (KeyValuePair<int, int[]> cc in Adjazenzliste) { textBox4.AppendText(Convert.ToString(cc.Key) + ": ");
foreach (int[] aa in Adjazenzliste.Values) { foreach(int value in aa) { textBox4.AppendText(value.ToString("000") + "; "); } textBox4.AppendText("\n"); } } |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!