Wie kann ich ein zweidimensionales String-Array deklarieren?


79
string[][] Tablero = new string[3][3];

Ich brauche eine 3x3-Array-Anordnung, um Informationen zu speichern. Wie deklariere ich das in C #?


3
Die Dokumentation zeigt deutlich, wie es geht: msdn.microsoft.com/en-us/library/9b9dty7d.aspx
Esteban Araya


1
Beachten Sie, dass es einen Unterschied zwischen dem OP-Code [] [] (gezackte Array-Struktur) und der akzeptierten Antwort [,] (mehrdimensional) gemäß dem obigen Link gibt.
Amalgamat

Antworten:


110
string[,] Tablero = new string[3,3];

Sie können es auch in derselben Zeile mit der Array-Initialisierungssyntax wie folgt instanziieren:

string[,] Tablero = new string[3, 3] {{"a","b","c"},
                                      {"d","e","f"}, 
                                      {"g","h","i"} };

2
Oder var tablero = new string[3,3];wenn Sie C # 3 oder höher verwenden
bdukes

9
Wenn Sie die Array-Initialisierer-Syntax verwenden, müssen Sie die Grenzen nicht new string[,]
angeben

2
Sie müssen überhaupt nicht schreiben new string[,]...string [,] Tablero = {{"a","b","c"}, {"d","e","f"}, {"g","h","i"} }
Jim Balter

1
Um zu verdeutlichen, dass die erste 3 in [3, 3] die Anzahl der Zeilen ist, ist die zweite 3 die Anzahl der Spalten (jeder scheint [3, 3] ausgewählt zu haben, nur um zu verwirren :-))
bytedev

54

Sie wollen wahrscheinlich das:

string[,] Tablero = new string[3,3];

Dadurch erhalten Sie ein matrixartiges Array, in dem alle Zeilen dieselbe Länge haben.

Das Array in Ihrem Beispiel ist ein sogenanntes gezacktes Array , dh ein Array von Arrays, bei denen die Elemente unterschiedlich groß sein können. Ein gezacktes Array müsste auf andere Weise erstellt werden:

string[][] Tablero = new string[3][];
for (int i = 0; i < Tablero.GetLength(0); i++)
{
    Tablero[i] = new string[3];
}

Sie können auch Initialisierer verwenden, um die Array-Elemente mit Daten zu füllen:

string[,] Tablero = new string[,]
{
    {"1.1","1.2", "1.3"},
    {"2.1","2.2", "2.3"},
    {"3.1", "3.2", "3.3"}
};

Und im Falle eines gezackten Arrays:

string[][] Tablero = new string[][]
{
    new string[] {"1.1","1.2", "1.3"},
    new string[] {"2.1","2.2", "2.3"},
    new string[] {"3.1", "3.2", "3.3"}
};

15

Sie haben gerade ein gezacktes Array deklariert. Solche Arrays können für alle Dimensionen unterschiedliche Größen haben. Zum Beispiel:

string[][] jaggedStrings =  {
new string[] {"x","y","z"},
new string[] {"x","y"},
new string[] {"x"}
};

In Ihrem Fall benötigen Sie ein reguläres Array. Siehe Antworten oben. Mehr über gezackte Arrays


11

Ich nehme an, Sie suchen danach:

        string[,] Tablero = new string[3,3];

Die Syntax für ein gezacktes Array lautet:

        string[][] Tablero = new string[3][];
        for (int ix = 0; ix < 3; ++ix) {
            Tablero[ix] = new string[3];
        }

10

Es gibt zwei Arten von mehrdimensionalen Arrays in C #, genannt Multidimensionalund Jagged.

Für mehrdimensionale können Sie durch:

string [,] multi = neuer String [3, 3];

Für gezackte Arrays müssen Sie etwas mehr Code schreiben:

string[][] jagged = new string[3][];
            for (int i = 0; i < jagged.Length; i++)
            {
                jagged[i] = new string[3];
            }

Kurz gesagt, ein gezacktes Array ist schneller und hat eine intuitive Syntax. Weitere Informationen finden Sie unter: Diese Stackoverflow-Frage


3
Im gezackten Fall können Sie es direkt wie string[][] jagged = { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } }; oder var jagged = new[] { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } };
nawfal



6

string[][]ist kein zweidimensionales Array, sondern ein Array von Arrays (ein gezacktes Array ). Das ist etwas anderes.

Verwenden Sie diese Syntax, um ein zweidimensionales Array zu deklarieren:

string[,] tablero = new string[3, 3];

Wenn Sie wirklich ein gezacktes Array möchten , müssen Sie es wie folgt initialisieren:

string[][] tablero = new string[][] { new string[3], 
                                      new string[3], 
                                      new string[3] };

6

Ein 3x3 (mehrdimensionales) Array kann auch wie folgt initialisiert werden (Sie haben es bereits deklariert):

string[,] Tablero =  {
                        { "a", "b", "c" },
                        { "d", "e", "f" }, 
                        { "g", "h", "i"} 
                     };


@ JohnSaunders Ich sehe nicht. Es ist etwas anderes, den gesamten Typ auf der rechten Seite ignoriert zu lassen.
Nawfal

1
Nein, es ist genau das gleiche.
John Saunders

1
@ JohnSaunders Ich schlug einen anderen Weg zur Initialisierung vor. Nicht viele wissen, dass sie die Größe weglassen und sogar rhs während der Array-Initialisierung eingeben kann. Natürlich macht es das gleiche. Da die Frage eher "Wie deklariere / initialisiere ich" lautet, ist dies auch eine Möglichkeit. Siehe die Antwort von Eric, in der er jede Technik separat erwähnt.
Nawfal

2
Oh ok. Ich würde mein Downvote loswerden, aber es scheint bereits verschwunden zu sein.
John Saunders

6

Wenn Sie versuchen, ein mehrdimensionales Array zu erstellen, müssen Sie der Deklaration lediglich ein Komma hinzufügen:

string[,] tablero = new string[3,3].

3

Sie können auch den folgenden Code schreiben.

Array lbl_array = Array.CreateInstance(typeof(string), i, j);

Dabei ist 'i' die Anzahl der Zeilen und 'j' die Anzahl der Spalten. Mit der Methode 'typeof (..)' können Sie den Typ Ihres Arrays auswählen, dh int, string, double


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.