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 столбца

Это табличка 3x4: представьте 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 и выше — редко используются, но встречаются в продвинутой математике, симуляциях, машинном обучении и пр.
2
Задача
C# SELF, 7 уровень, 4 лекция
Недоступна
Инициализация двумерного массива и вывод его элементов
Инициализация двумерного массива и вывод его элементов
2
Задача
C# SELF, 7 уровень, 4 лекция
Недоступна
Подсчёт суммы элементов строк в двумерном массиве
Подсчёт суммы элементов строк в двумерном массиве
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Александр Уровень 22
6 октября 2025
короч поспорил я как-то с одним сеньёром (C#) о том, как индексируются измерения в многомерных массивах (конкретно на примере трёхмерного). Он стоял на том, что 0 - всегда строки, 1 - столбцы, 2 - срезы (глубина). Ну а если есть ещё измерения, то они идут далее в плюс (3,4,5...) Я стоял на том, что самое "старшее" измерение всегда имеет наибольший индекс, а самое "младшее" (т.е. это всегда столбцы) имеет наименьший индекс 0. Так-то оно понятно, что я был прав, но в лекции эта тема не раскрыта, а вопросы такие задавать любят
Ra Уровень 35 Student
4 сентября 2025
Fun fact: в Java таких массивов нет. В Java есть массивы массивов, то что в C# называется зубчатым массивом. Там просто если надо, делают все зубы одинаковой длины и получается многомерный массив 😂 Но в C# можно обойти двумерный массив через foreach как одномерный, а в Java зубчатый нельзя.