Массивы. Часть 2. Многомерные массивы. Ступенчатые массивы
Содержание
- Вопрос/ответ
- 1. Какой массив называется многомерным?
- 2. Какая общая форма объявления многомерного массива?
- 3. Пример объявления и использования двумерного массива вещественных чисел размером 3×4
- 4. Пример объявления и использования трехмерного массива целых чисел размером 3×4×5
- 5. Как выглядит общая форма инициализации многомерного массива?
- 6. Пример инициализации двумерного массива размером 5×3. Элементы массива имеют тип char
- 7. Пример инициализации трехмерного массива целых чисел размером 2×3×4
- 8. Что такое ступенчатый массив? Какая общая форма объявления ступенчатого массива?
- 9. Пример объявления и использования ступенчатого массива
- 10. В каких случаях целесообразно использовать ступенчатые массивы?
- 11. Каким образом реализовать массив двумерных массивов? Пример
- Связанные темы
Поиск на других ресурсах:
1. Какой массив называется многомерным?
Многомерный массив – это массив, который имеет два и более измерений. Для доступа к элементу многомерного массива используется комбинация из двух и более индексов.
⇑
2. Какая общая форма объявления многомерного массива?
Общая форма объявления многомерного массива следующая:
тип[,...,] имя_массива = new тип[размер1, размер2, ..., размерN];
где
- тип – непосредственно тип элементов массива;
- размер1, размер2, размерN – размерность каждого измерения массива. Значение N означает, что массив N-мерный.
⇑
3. Пример объявления и использования двумерного массива вещественных чисел размером 3×4
В примере объявляется двумерный массив вещественных чисел, которые имеют тип float
// объявление и использование массива вещественных чисел размером 3*4 float[,] M = new float[3, 4]; // выделить память для массива // заполнение массива произвольными значениями for (int i = 0; i < 3; i++) for (int j = 0; j < 4; j++) M[i, j] = (float)(i * 0.2 + j * 0.3); // запись значений в отдельные ячейки массива M[0, 1] = 0.35f; M[2, 2] = 1.45f;
⇑
4. Пример объявления и использования трехмерного массива целых чисел размером 3×4×5
// объявление трехмерного массива целых чисел размером 3*4*5 ulong[, ,] A; // описать переменную (ссылку) типа "трехмерный массив целых чисел" A = new ulong[3, 4, 5]; // выделить память для массива // записать в отдельные ячейки массива значение A[0, 2, 3] = 232; A[0, 0, 1] = 300; A[2, 3, 1] = 20000;
⇑
5. Как выглядит общая форма инициализации многомерного массива?
Инициализация массива позволяет записать значения в ячейки массива в момент его объявления в программе.
Общая форма инициализации многомерного массива имеет следующий вид:
тип[,] имя_массива = { { значение, значение, ..., значение },
{ значение, значение, ..., значение },
...
{ значение, значение, ..., значение } };
где
- тип – тип элементов массива;
- значение – значение, которыми инициализируются элементы массива.
⇑
6. Пример инициализации двумерного массива размером 5×3. Элементы массива имеют тип char
// инициализация двумерного массива char[,] M = { { 'A', 'B', 'C', 'D', 'E' }, { '8', '-', '=', '>', '+' }, { '~', 'U', '&', '\\', '@' } };
⇑
7. Пример инициализации трехмерного массива целых чисел размером 2×3×4
// инициализация трехмерного массива целых чисел short[, ,] B = { { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } }, { { 13, 14, 15, 16 }, { 17, 18, 19, 20 }, { 21, 22, 23, 24 } } };
⇑
8. Что такое ступенчатый массив? Какая общая форма объявления ступенчатого массива?
Двумерные массивы могут быть двух видов:
- прямоугольный массив в виде таблицы;
- ступенчатый массив. В этом массиве количество элементов каждой строки (массива) может отличаться. Ступенчатый массив еще называют массивом массивов.
Общая форма объявления ступенчатого массива:
тип [][] имя_массива = new тип[размер][];
где
- тип – тип элементов массива;
- размер – количество строк в массиве.
⇑
9. Пример объявления и использования ступенчатого массива
// ступенчатые массивы // объявление массива из 4-х строк, элементы которого имеют тип ulong ulong[][] A = new ulong[4][]; // выделение памяти для каждой строки A[0] = new ulong[5]; // в строке с индексом 0 есть 5 элементов A[1] = new ulong[3]; // в строке с индексом 1 есть 3 элемента A[2] = new ulong[6]; A[3] = new ulong[4]; // демонстрация доступа к элементам массива A A[0][0] = 2003; A[0][4] = 199008; A[1][2] = 302909; A[3][3] = 10000000; for (int i = 0; i < 6; i++) A[2][i] = (ulong)(i * i * i);
Как видно из примера, доступ к элементам ступенчатого массива происходит иначе чем в прямоугольном массиве.
⇑
10. В каких случаях целесообразно использовать ступенчатые массивы?
Ступенчатые массивы являются эффективными в случаях, если у двумерных прямоугольных массивов есть много элементов, которые вообще не используются. Это позволяет сэкономить память за счет выделения только необходимого объема памяти (количества элементов) для каждой строки ступенчатого массива.
На рисунке 1 отображено преимущество применения ступенчатых массивов в сравнении с прямоугольными. Продемонстрирована возможная экономия памяти в случае, когда данные представляются прямоугольным массивом в котором все элементы некоторых строк (0, 2, 3, 4) не используются.
Способ 1. Объявление прямоугольного массива с именем M.
// объявление прямоугольного массива int[,] M = new int[5,100]; // выделяется 500 ячеек типа int
Способ 2. Объявление ступенчатого массива.
// объявление ступенчатого массива int[][] M = new int[5][]; // выделяется 50+100+30+60+40 = 280 ячеек типа int M[0] = new int[50]; M[1] = new int[100]; M[2] = new int[30]; M[3] = new int[60]; M[4] = new int[40];
Рис. 1. Пример экономии памяти с помощью ступенчатого массива из 5 строк в сравнении с прямоугольным массивом размером 5×100
⇑
11. Каким образом реализовать массив двумерных массивов? Пример
В примере реализуется массив двумерных массивов с именем M. Массив имеет 10 строк. В каждой строке формируется двумерный массив размером 3×4.
// объявление массива из 10 двумерных массивов вещественных чисел, каждый из которых имеет размер 3*4 float[][,] M; // объявление переменной типа "массив двумерных массивов" // выделение памяти для 10 двумерных массивов типа float M = new float[10][,]; // выделение памяти для каждого массива размером 3*4 for (int i = 0; i < 10; i++) M[i] = new float[3, 4]; // заполнение массивов произвольными значениями for (int i = 0; i < 10; i++) for (int j = 0; j < 3; j++) for (int k = 0; k < 4; k++) M[i][j, k] = i * 10 + j * 3 + k; // заполнить конкретные ячейки M[0][2, 1] = 20.44f; M[2][0, 2] = 100.08f;
⇑
Связанные темы
- Одномерные массивы. Примеры решения задач на одномерные массивы. Массивы структур. Массивы классов
- Ссылки на массивы. Свойство Length. Присваивание массивов
- Неявно типизированные массивы. Ключевое слово var