JavaRush /Курси /C# SELF /Двовимірні масиви

Двовимірні масиви

C# SELF
Рівень 7 , Лекція 4
Відкрита

1. Вступ

Уявіть собі звичайний масив як довгу коробку з-під піци, де всі шматочки лежать у ряд — смачно, але одноманітно.

А тепер уявіть розклад занять або шахову дошку. Там уже все організовано в рядки і стовпці — тобто в таблицю. Це й є класичне завдання для двовимірного масиву.

У реальному житті двовимірні масиви трапляються на кожному кроці:

  • Таблиці із зарплатами працівників (рядки — працівники, стовпці — місяці).
  • Зображення на екрані (кожна «клітинка» — піксель із кольором і двома координатами: X і Y).
  • Матричні обчислення та обробка даних.
  • Шахова дошка або поле для хрестиків-нуликів.

Іноді двовимірний масив називають матрицею (назва походить із математики).

Є чимало задач, де вам, як програмісту, знадобиться двовимірний масив. Реалізацію майже будь-якої настільної гри зручно моделювати двовимірним масивом: «шахи», «шашки», «хрестики-нулики», «морський бій»:

Двовимірні масиви 2

Ігрові поля для «шахів» чи «морського бою» ідеально відповідають двовимірним масивам: координати клітинок — це просто числа. Не «пішак e2 → e4», а «пішак (4,1) → (4,3)». Вам, як програмісту, так навіть простіше.

2. Синтаксис оголошення двовимірних масивів

Лячно лише до першого оголошення! Розбираймося крок за кроком.

Загальне правило

тип[,] ім'яМасиву;
Оголошення двовимірного масиву

Тут кома , всередині дужок — не помилка компілятора після ночі з кавою, а вказівка: масив двовимірний.

Приклади

int[,] matrix;
double[,] gradesTable;
string[,] chessBoard;

Створення масиву

Задаємо розміри: кількість рядків і стовпців.

matrix = new int[3, 4]; // 3 рядки, 4 стовпці

Це таблиця 3×4: уявіть аркуш Excel із 3 рядками і 4 стовпцями.

Можна одразу оголосити змінну та створити двовимірний масив:

int[,] matrix = new int[3, 4];

Можна одразу ініціалізувати значеннями (подібно до одномірного):

int[,] example = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
// Таблиця: 3 рядки, 3 стовпці
Ініціалізація двовимірного масиву значеннями

Важливо: усі рядки під час такої ініціалізації мають бути однакової довжини. Не можна зробити перший рядок із 3 елементів, а другий — із 2.

Візуальна схема

┌─────┬─────┬─────┬─────┐
│  0  │  1  │  2  │  3  │  ← стовпці (Columns)
├─────┼─────┼─────┼─────┤
│ 0,0 │0,1  │0,2  │0,3  │  ← рядок 0 (Row 0)
├─────┼─────┼─────┼─────┤
│ 1,0 │1,1  │1,2  │1,3  │  ← рядок 1 (Row 1)
├─────┼─────┼─────┼─────┤
│ 2,0 │2,1  │2,2  │2,3  │  ← рядок 2 (Row 2)
└─────┴─────┴─────┴─────┘

Кожен елемент визначається парою індексів [рядок, стовпець].

3. Індексація та доступ до елементів

У двовимірному масиві для доступу до елемента вказуються два індекси:

  • Перший — номер рядка
  • Другий — номер стовпця

matrix[1, 2] = 99;  // У другому рядку (індекс 1), третій стовпець (індекс 2)
Присвоєння значення елементу двовимірного масиву

Якщо ви звикли до шахів, нагадаю: індексація починається з нуля. Тобто перший елемент — це [0, 0].

Запис і читання

int[,] data = new int[5, 2];
data[1, 1] = 5;         // запис
int value = data[1, 1]; // читання

Ось як це буде виглядати у памʼяті:

Двовимірні масиви

4. Заповнення двовимірного масиву

Давайте напишемо код, який заповнить матрицю послідовними числами від 1 до 12, щоб було зрозуміло, як це працює.

int[,] matrix = new int[3, 4];
int value = 1;

for (int row = 0; row < 3; row++)
{
    for (int col = 0; col < 4; col++)
    {
        matrix[row, col] = value;
        value++;
    }
}
Заповнення двовимірного масиву послідовними числами

Тут зовнішній цикл перебирає рядки, внутрішній — стовпці.

Ілюстрація:

Після виконання:
┌────┬────┬────┬────┐
│ 1  │ 2  │ 3  │ 4  │
├────┼────┼────┼────┤
│ 5  │ 6  │ 7  │ 8  │
├────┼────┼────┼────┤
│ 9  │10  │11  │12  │
└────┴────┴────┴────┘

5. Розмірності: визначення кількості рядків і стовпців

Часто розміри масиву потрібно дізнатися «на льоту». У C# для цього є зручний метод GetLength().

int[,] matrix = new int[3, 4];

int rows = matrix.GetLength(0);    // кількість рядків (перший вимір) - 3
int columns = matrix.GetLength(1); // кількість стовпців (другий вимір) - 4

Console.WriteLine($"Рядків: {rows}, стовпців: {columns}");
Увага:

Не плутайте з Length — у двовимірному масиві це загальна кількість усіх елементів (рядки × стовпці).

6. Виведення двовимірного масиву на екран

Для виведення двовимірної таблиці зазвичай використовують подвійний цикл — майже як намалювати лабіринт у консолі. Приклад:

for (int row = 0; row < matrix.GetLength(0); row++)
{
    for (int col = 0; col < matrix.GetLength(1); col++)
    {
        Console.Write(matrix[row, col] + "\t"); // "\t" — табуляція для краси
    }
    Console.WriteLine(); // перехід на новий рядок
}

Приклад виведення:

1	2	3	4	
5	6	7	8	
9	10	11	12	

До речі, тут ви навчилися гарно «малювати» таблиці за допомогою пари рядків коду!

7. Багатовимірні масиви

І ще один цікавий факт про масиви, про який ви, мабуть, уже здогадуєтеся. Якщо можна створити двовимірний масив, то можна і тривимірний?

Так, можна створити масив будь-якої розмірності. Такі масиви називають багатовимірними.

Як оголошувати багатовимірні масиви

Достатньо просто перелічити потрібну кількість розмірів через кому:

int[,,,] matrix = new int[2, 3, 4, 5];
Оголошення чотиривимірного масиву

Тут у нас чотиривимірний масив:

  • 2 елементи по першій координаті,
  • 3 — по другій,
  • 4 — по третій,
  • 5 — по четвертій.

У памʼяті такий масив — це один великий «куб» даних, розміщений послідовно.

Як звертатися до елементів

Доступ до елемента здійснюється за всіма індексами одночасно:

matrix[0, 1, 2, 3] = 42;
int value = matrix[1, 2, 0, 4];
  • Індекси нумеруються з нуля, як завжди у C#.
  • Усього в такому масиві буде 2 × 3 × 4 × 5 = 120 елементів.

Практичні приклади багатовимірних масивів

  • 2D — таблиці, шахові дошки, зображення.
  • 3D — «кубики» у компʼютерній графіці, дані для наукових розрахунків (наприклад, температура в різних точках простору й часу).
  • 4D і вище — використовуються рідко, але трапляються в складній математиці, симуляціях, машинному навчанні тощо.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ