1. Вступ
Уявіть собі звичайний масив як довгу коробку з-під піци, де всі шматочки лежать у ряд — смачно, але одноманітно.
А тепер уявіть розклад занять або шахову дошку. Там уже все організовано в рядки і стовпці — тобто в таблицю. Це й є класичне завдання для двовимірного масиву.
У реальному житті двовимірні масиви трапляються на кожному кроці:
- Таблиці із зарплатами працівників (рядки — працівники, стовпці — місяці).
- Зображення на екрані (кожна «клітинка» — піксель із кольором і двома координатами: X і Y).
- Матричні обчислення та обробка даних.
- Шахова дошка або поле для хрестиків-нуликів.
Іноді двовимірний масив називають матрицею (назва походить із математики).
Є чимало задач, де вам, як програмісту, знадобиться двовимірний масив. Реалізацію майже будь-якої настільної гри зручно моделювати двовимірним масивом: «шахи», «шашки», «хрестики-нулики», «морський бій»:
Ігрові поля для «шахів» чи «морського бою» ідеально відповідають двовимірним масивам: координати клітинок — це просто числа. Не «пішак 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 і вище — використовуються рідко, але трапляються в складній математиці, симуляціях, машинному навчанні тощо.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ