Entwickler-Ecke

Basistechnologien - Liste von Arrays


pepe-je - Do 22.04.10 20:57
Titel: Liste von Arrays
Ich möchte eine zweidimensionale Liste schaffen, also mit Zeilen und Spalten.
Ich habe das mit einer Liste von Arrays versucht

Liste<Array>

und dazu ein kleines Programm zum ausprobieren geschrieben


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
           List<Array> Liste  = new List<Array>();
            string[] arr = new string[4];
            ListBox listBox1 = new ListBox();

            arr[0] = "Maus";
            arr[1] = "Ratte";
            arr[2] = "Hamster";
            arr[3] = "Eichhörnchen";

            Liste.Add(arr);

            arr[0] = "Geier";
            arr[1] = "Adler";
            arr[2] = "Habicht";
            arr[3] = "Falke";

            Liste.Add(arr);

            foreach (string[] a in Liste)
            {
                foreach (string s in a)
                {
                    listBox1.Items.Add(s);
                }
            }


In der ListBox sollten nun die acht verschiedenen Tiere stehen. Aber in Wirklichkeit werden die letzten 4 Tiere, also die des zweiten Arrays, zweimal hintereinander aufgelistet.
Ich habe keine Ahnung, wodurch das kommt .Kann mir jemand helfen?
Vielen Dank
pepe-je

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


danielf - Do 22.04.10 21:02

Hallo,

mit Bereich C#, Text auswählen und dann auf Plus klicken kannst du Code als solchen kennzeichen oder einfach [ cs]code[/ cs] einfügen.

Zuerst zu deinem Problem. Das liegt daran, dass du kein neues Array objekt anlegst, sondern das Alte nur überschreibst. Deshalb stehen dann in beiden das Gleiche. ein arr = new string[4] nach dem ersten Add sollte abhilfe schaffen.

Das Andere ist, dass du auch eine List<List<string>> anlegen kannst, falls du noch nicht sicher weißt, wieviel Tiere in eine Kategorie kommen.

Gruß


Ralf Jansen - Do 22.04.10 21:03

Da passiert weil du nach dem ersten 'Liste.Add(arr);' kein neues Array erzeugst sondern die Elemente des alten Arrays überschreibst. Du hast also 2 mal das gleiche Array der Liste hinzugefügt.
Füg mal ein 'arr = new string[4];' vor dem zwiten befüllen von arr hinzu.

Übrigens könntest du auch gleich eine List<List<string>> benutzten.


pepe-je - Fr 23.04.10 09:16

Hallo, Daniel und Ralf,
Euch beiden vielen Dank für Eure Hilfe.
Gruß Peter