Як я можу оголосити двовимірний масив рядків?


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

Мені потрібно мати розташування масиву 3x3 для збереження інформації. Як я можу оголосити це в C #?


3
Документація чітко показує, як це зробити: msdn.microsoft.com/en-us/library/9b9dty7d.aspx
Естебан Арая


1
Зверніть увагу, що існує різниця між кодом OP [] [] (структура зубчастого масиву) та прийнятою відповіддю [,] (багатовимірність), згідно з посиланням вище.
об'єднати

Відповіді:


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

Ви також можете створити його в одному рядку із синтаксисом ініціалізатора масиву, як показано нижче:

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

2
Або var tablero = new string[3,3];якщо ви використовуєте C # 3 або пізнішої версії
bdukes

9
Якщо ви використовуєте синтаксис ініціалізатора масиву, вам не потрібно new string[,]
вводити

2
Вам зовсім не потрібно писати new string[,]...string [,] Tablero = {{"a","b","c"}, {"d","e","f"}, {"g","h","i"} }
Джим Балтер

3
Щоб пояснити, що перші 3 в [3, 3] - це кількість рядків, другі 3 - це кількість стовпців (здається, усі вибрали [3, 3] просто для заплутування :-))
bytedev

54

Ви, мабуть, хочете цього:

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

Це створить матрицеподібний масив, де всі рядки мають однакову довжину.

Масив у зразку - це так званий зубчастий масив , тобто масив масивів, де елементи можуть мати різний розмір. Нерівний масив потрібно було б створити іншим способом:

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

Ви також можете використовувати ініціалізатори, щоб заповнити елементи масиву даними:

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

А у випадку зазубреного масиву:

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

Ви щойно оголосили нерівний масив. Такі масиви можуть мати різні розміри для всіх розмірів. Наприклад:

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

У вашому випадку вам потрібен звичайний масив. Дивіться відповіді вище. Детальніше про зубчасті масиви


11

Я припускаю, що ви шукаєте це:

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

Синтаксис нерівного масиву:

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

10

У C # є 2 типи багатовимірних масивів, які називаються Multidimensionalта Jagged.

Для багатовимірних можна:

рядок [,] multi = новий рядок [3, 3];

Для зазубреного масиву вам потрібно написати трохи більше коду:

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

Коротше кажучи, зубчастий масив є швидшим і має інтуїтивно зрозумілий синтаксис. Для отримання додаткової інформації дивіться: це питання Stackoverflow


3
У нерівному випадку ви можете ініціалізувати це безпосередньо, як string[][] jagged = { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } }; або var jagged = new[] { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } };
nawfal



6

string[][]це НЕ двовимірний масив, це масив масивів (а зазубрений масив ). Це щось інше.

Щоб оголосити двовимірний масив, використовуйте такий синтаксис:

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

Якщо ви дійсно хочете нерівний масив , вам потрібно його ініціалізувати так:

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

6

3x3 (багатовимірний) масив також можна ініціалізувати (ви вже заявили про нього) таким чином:

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


@JohnSaunders Я не бачу. Залишати весь тип ігнорованим на rhs - це щось інше.
nawfal

1
Ні, це точно те саме.
Джон Сондерс,

1
@JohnSaunders Я пропонував інший спосіб ініціалізації. Не багато хто знає, що вона може пропустити розмір і навіть вводити на rhs під час ініціалізації масиву. Звичайно, він робить те саме. Оскільки питання більше нагадує "як мені оголосити / ініціалізувати", це теж один із способів. Див цього Еріка відповідь , в якому він окремо згадує кожну техніку.
nawfal

2
О, добре. Я б позбувся свого голосу проти, але, схоже, він уже зник.
Джон Сондерс,

6

Коли ви намагаєтеся створити багатовимірний масив, все, що вам потрібно зробити, це додати кому до оголошення так:

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

3

Ви також можете написати код нижче.

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

де 'i' - кількість рядків, а 'j' - кількість стовпців. використовуючи метод 'typeof (..)', ви можете вибрати тип вашого масиву, тобто int, string, double


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.