Массивы трех и более измерений



 

В 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

 

 

Ступенчатые массивы

 

В приведенных выше примерах применения двумерного массива, по существу, создавался так называемый прямоугольный массив. Двумерный массив можно представить в виде таблицы, в которой длина каждой строки остается неизменной по всему массиву. Но в C# можно также создавать специальный тип двумерного массива, называемый ступенчатым массивом. Ступенчатый массив представляет собой массив массивов, в котором длина каждого массива может быть разной. Следовательно, ступенчатый массив может быть использован для составления таблицы из строк разной длины.

Ступенчатые массивы объявляются с помощью ряда квадратных скобок, в которых указывается их размерность. Например, для объявления двумерного ступенчатого массива служит следующая общая форма:

 

тип[] [] имя_массива = new тип [размер] [];  

 

где размер обозначает число строк в массиве. Память для самих строк распределяется индивидуально, и поэтому длина строк может быть разной. Например, в приведенном ниже фрагменте кода объявляется ступенчатый массив jagged. Память сначала распределяется для его первого измерения автоматически, а затем для второго измерения вручную.

 

int[][] jagged = new int[3][];  

jagged[0] = new int [4];  

jagged[1] = new int[3];  

jagged[2] = new int[5];

 

После выполнения этого фрагмента кода массив jagged выглядит так, как показано ниже.

 

 

Теперь нетрудно понять, почему такие массивы называются ступенчатыми! После создания ступенчатого массива доступ к его элементам осуществляется по индексу, указываемому в отдельных квадратных скобках. Например, в следующей строке кода элементу массива jagged, находящемуся на позиции с координатами (2,1), присваивается значение 10.

 

jagged[2] [1] = 10;

 

Обратите внимание на синтаксические отличия в доступе к элементу ступенчатого и прямоугольного массива.

В приведенном ниже примере программы демонстрируется создание двумерного ступенчатого массива.

 

// Продемонстрировать применение ступенчатых массивов.

using System;

class Jagged {

static void Main() {

int[][] jagged = new int[3][];  

jagged[0] = new int[4];  

jagged[1] = new int[3];  

jagged[2] = new int[5];

 

int i;

 

// Сохранить значения в первом массиве.  

for(i=0; i < 4; i++)

jagged[0][i] = i;

 

// Сохранить значения во втором массиве.  

for(i=0; i < 3; i++)  

jagged[1][i] = i;

 


Дата добавления: 2019-02-12; просмотров: 274; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!