Книга: C# 4.0: полное руководство
Многомерные массивы
Разделы на этой странице:
Многомерные массивы
В программировании чаще всего применяются одномерные массивы, хотя и многомерные не так уж и редки. Многомерным называется такой массив, который отличается двумя или более измерениями, причем доступ к каждому элементу такого массива осуществляется с помощью определенной комбинации двух или более индексов.
Двумерные массивы
Простейшей формой многомерного массива является двумерный массив. Местоположение любого элемента в двумерном массиве обозначается двумя индексами. Такой массив можно представить в виде таблицы, на строки которой указывает один индекс, а на столбцы — другой.
В следующей строке кода объявляется двумерный массив integer
размерами 10x20.
int[,] table = new int[10, 20];
Обратите особое внимание на объявление этого массива. Как видите, оба его размера разделяются запятой. В первой части этого объявления синтаксическое обозначение [,] означает, что создается переменная ссылки на двумерный массив. Если же память распределяется для массива с помощью оператора new
, то используется следующее синтаксическое обозначение.
int[10, 20]
В данном объявлении создается массив размерами 10x20, но и в этом случае его размеры разделяются запятой.
Для доступа к элементу двумерного массива следует указать оба индекса, разделив их запятой. Например, в следующей строке кода элементу массива table с координатами местоположения (3,5) присваивается значение 10.
table[3, 5] = 10;
Ниже приведен более наглядный пример в виде небольшой программы, в которой двумерный массив сначала заполняется числами от 1 до 12, а затем выводится его содержимое.
// Продемонстрировать двумерный массив.
using System;
class TwoD {
static void Main() {
int t, i;
int[,] table = new int[3, 4];
for(t=0; t < 3; ++t) {
for(i=0; i < 4; ++i) {
table[t,i] = (t*4)+i+1;
Console.Write(table[t, i] + " ");
}
Console.WriteLine();
}
}
}
В данном примере элемент массива table[ 0, 0 ] будет иметь значение 1, элемент массива table[0,1] — значение 2, элемент массива table[0,2] — значение 3 и т.д. А значение элемента массива table[2,3] окажется равным 12. На рис. 7.1 показано схематически расположение элементов этого массива и их значений.
Рис. 7.1. Схематическое представление массива table, созданного в программе TwoD
------------------------------------------
СОВЕТ
Если вам приходилось раньше программировать на С, C++ или Java, то будьте особенно внимательны, объявляя или организуя доступ к многомерным массивам в С#. В этих языках программирования размеры массива и индексы указываются в отдельных квадратных скобках, тогда как в C# они разделяются запятой.
------------------------------------------
Массивы трех и более измерений
В C# допускаются массивы трех и более измерений. Ниже приведена общая форма объявления многомерного массива.
тип[, . . ., ] имя_массива = new тип[размер1, размер2, . . . размеры] ;
Например, в приведенном ниже объявлении создается трехмерный целочисленный массив размерами 4x10хЗ.
int[,,] multidim = new int[4, 10, 3];
А в следующем операторе элементу массива multidim с координатами местоположения (2,4,1) присваивается значение 100.
multidim[2, 4, 1] = 100;
Ниже приведен пример программы, в которой сначала организуется трехмерный массив, содержащий матрицу значений 3х3x3, а затем значения элементов этого массива суммируются по одной из диагоналей матрицы.
// Суммировать значения по одной из диагоналей матрицы 3x3x3.
using System;
class ThreeDMatrix {
static void Main() {
int[,,] m = new int[3, 3, 3];
int sum = 0;
int n = 1;
for(int x=0; x < 3; x++)
for(int y=0; y < 3; y++)
for(int z=0; z < 3; z++)
m[x, y, z] = n++;
sum = m[0, 0, 0] + m[1, 1, 1] + m[2, 2, 2];
Console.WriteLine("Сумма значений по первой диагонали: " + sum);
}
}
Вот какой результат дает выполнение этой программы.
Сумма значений по первой диагонали: 42
Инициализация многомерных массивов
Для инициализации многомерного массива достаточно заключить в фигурные скобки список инициализаторов каждого его размера. Ниже в качестве примера приведена общая форма инициализации двумерного массива:
тип[,] имя_массив а = {
{val, val, val ..., val},
{val, val, val,..., val},
{val, val, val,..., val}
};
где val обозначает инициализирующее значение, а каждый внутренний блок — отдельный ряд. Первое значение в каждом ряду сохраняется на первой позиции в массиве, второе значение — на второй позиции и т.д. Обратите внимание на то, что блоки инициализаторов разделяются запятыми, а после завершающей эти блоки закрывающей фигурной скобки ставится точка с запятой.
В качестве примера ниже приведена программа, в которой двумерный массив sqrs
инициализируется числами от 1 до 10 и квадратами этих чисел.
// Инициализировать двумерный массив, using System;
using System;
class Squares {
static void Main() {
int[,] sqrs = {
{ 1, 1 },
{ 2, 4 },
{ 3, 9 },
{ 4, 16 },
{ 5, 25 },
{ 6, 36 },
{ 7, 49 },
{ 8, 64 },
{ 9, 81 },
{ 10, 100 }
};
int i, j;
for(i=0; i < 10; i++) {
for(j=0; j < 2; j++)
Console.Write(sqrs[i,j] + " ");
Console.WriteLine();
}
}
}
При выполнении этой программы получается следующий результат.
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
- 3. МАССИВЫ
- Глава 5. Указатели и массивы
- УКАЗАТЕЛИ И МНОГОМЕРНЫЕ МАССИВЫ
- Функции и многомерные массивы
- 11.10. Десериализация нотации JSON в массивы и словари
- 8.1.11. Многомерные массивы
- ФУНКЦИИ, МАССИВЫ И УКАЗАТЕЛИ
- МНОГОМЕРНЫЕ МАССИВЫ
- 5.3 Указатели и массивы
- 7.7. Многомерные массивы
- 5.7 Многомерные массивы
- 3.1. Многомерные массивы