Jak mogę zadeklarować dwuwymiarową tablicę ciągów?


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

Muszę mieć układ tablicy 3x3, aby zapisać informacje. Jak zadeklarować to w C #?


3
Dokumentacja jasno pokazuje, jak to zrobić: msdn.microsoft.com/en-us/library/9b9dty7d.aspx
Esteban Araya


1
Zauważ, że istnieje różnica między kodem OP [] [] (struktura tablicy postrzępionej) a akceptowaną odpowiedzią [,] (wielowymiarowa), zgodnie z powyższym linkiem.
połączono

Odpowiedzi:


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

Możesz również utworzyć instancję w tym samym wierszu ze składnią inicjatora tablicy w następujący sposób:

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

2
Lub var tablero = new string[3,3];jeśli używasz C # 3 lub nowszego
bdukes

9
Jeśli używasz składni inicjatora tablicy, nie musisz podawać granic (tj. Możesz po prostu pisać new string[,])
bdukes

2
Nie musisz new string[,]w ogóle pisać ...string [,] Tablero = {{"a","b","c"}, {"d","e","f"}, {"g","h","i"} }
Jim Balter,

3
Aby wyjaśnić, że pierwsze 3 w [3, 3] to liczba wierszy, drugie 3 to liczba kolumn (wydaje się, że wszyscy wybrali [3, 3] tylko po to, aby zmylić :-))
bytedev

54

Prawdopodobnie tego chcesz:

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

Spowoduje to utworzenie tablicy podobnej do macierzy, w której wszystkie wiersze mają tę samą długość.

Tablica w twojej próbce to tak zwana tablica postrzępiona , tj. Tablica tablic, w której elementy mogą mieć różne rozmiary. Tablica postrzępiona musiałaby zostać utworzona w inny sposób:

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

Możesz także użyć inicjatorów, aby wypełnić elementy tablicy danymi:

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

A w przypadku tablicy postrzępionej:

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

Właśnie zadeklarowałeś postrzępioną tablicę. Tego rodzaju tablice mogą mieć różne rozmiary dla wszystkich wymiarów. Na przykład:

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

W twoim przypadku potrzebujesz zwykłej tablicy. Zobacz odpowiedzi powyżej. Więcej o tablicach postrzępionych


11

Zakładam, że szukasz tego:

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

Składnia tablicy postrzępionej to:

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

10

Istnieją 2 typy tablic wielowymiarowych w języku C # o nazwach Multidimensionali Jagged.

W przypadku wielowymiarowości możesz:

ciąg [,] multi = nowy ciąg [3, 3];

Dla tablicy postrzępionej musisz napisać trochę więcej kodu:

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

Krótko mówiąc, tablica postrzępiona jest zarówno szybsza, jak i ma intuicyjną składnię. Aby uzyskać więcej informacji, zobacz: to pytanie Stackoverflow


3
W poszarpanym przypadku możesz zainicjować go bezpośrednio, jak string[][] jagged = { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } }; lub var jagged = new[] { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } };
nawfal



6

string[][]jest nie dwuwymiarową tablicą jest tablica macierzy (a postrzępione tablica ). To coś innego.

Aby zadeklarować dwuwymiarową tablicę, użyj następującej składni:

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

Jeśli naprawdę chcesz mieć postrzępioną tablicę , musisz ją zainicjować w następujący sposób:

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

6

Tablicę 3x3 (wielowymiarową) można również zainicjować (już ją zadeklarowałeś) w następujący sposób:

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


@JohnSaunders Nie widzę. Zignorowanie całego typu na prawej stronie to co innego.
nawfal

1
Nie, to jest dokładnie to samo.
John Saunders

1
@JohnSaunders Sugerowałem inny sposób inicjalizacji. Niewielu wie, że może pominąć rozmiar, a nawet pisać na prawach strony podczas inicjalizacji tablicy. Oczywiście robi to samo. Ponieważ pytanie bardziej przypomina „jak zadeklarować / zainicjować”, jest to również jeden sposób. Zobacz odpowiedź Erica, w której osobno wymienia każdą technikę.
nawfal

2
Och, ok. Pozbyłbym się swojego głosu przeciw, ale wydaje się, że już zniknął.
John Saunders

6

Kiedy próbujesz utworzyć tablicę wielowymiarową, wszystko, co musisz zrobić, to dodać przecinek do deklaracji w następujący sposób:

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

3

możesz również napisać poniższy kod.

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

gdzie „i” to liczba wierszy, a „j” to liczba kolumn. używając metody 'typeof (..)' możesz wybrać typ swojej tablicy tj. int, string, double


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.