Инициализация многомерных массивов

      Комментарии к записи Инициализация многомерных массивов отключены

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

тип[,] имя_массива = {

{val, val, val , . . . , val},

{val, val, val , . . . , val},

.

.

.

{val, val, val , . . . , val}

};

где val обозначает инициализирующее значение, а каждый внутренний блок — отдельный ряд. Первое значение в каждом ряду сохраняется на первой позиции в массиве, второе значение — на второй позиции и т.д. Обратите внимание на то, что блоки инициализаторов разделяются запятыми, а после завершающей эти блоки закрывающей фигурной скобки ставится точка с запятой.

В качестве примера ниже приведена программа, в которой двумерный массив sqrs инициализируется числами от 1 до 10 и квадратами этих чисел.

Листинг 7.7

// Инициализировать двумерный массив.

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; i10; i++) {

for(j=0; j2; 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;

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

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

Листинг 7.8

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

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; i4; i++)

jagged[0][i] = i;

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

for(i=0; i3; i++)

jagged[1][i] = i;

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

for(i=0; i5; i++)

jagged[2][i] = i;

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

for(i=0; i4; i++)

Console.Write(jagged[0][i] +);

Console.WriteLine();

// Вывести значения из второго массива.

for(i=0; i3; i++)

Console.Write(jagged[1][i] +);

Console.WriteLine();

// Вывести значения из третьего массива.

for(i=0; i5; i++)

Console.Write(jagged[2][i] +);

Console.WriteLine();

}

}

Выполнение этой программы приводит к следующему результату.

0 1 2 3

0 1 2

0 1 2 3 4

Ступенчатые массивы находят полезное применение не во всех, а лишь в некоторых случаях. Так, если требуется очень длинный двумерный массив, который заполняется не полностью, т.е. такой массив, в котором используются не все, а лишь отдельные его элементы, то для этой цели идеально подходит ступенчатый массив.

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

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

В следующей строке кода элементу массива jagged[0] присваивается ссылка на массив размерами 4´2.

jagged[0] = new int[4,2];

А в приведенной ниже строке кода элементу массива jagged[0][1,0] присваивается значение переменной i.

jagged[0][1,0] = i;

Статьи к прочтению:

Двумерные массивы вывод. Заполнение. Двумерный массив циклы. C++ для начинающих. #32


Похожие статьи:

  • Многомерные массивы (матрицы)

    1. Дан двумерный массив размерностью 4 6, заполненный целыми числами с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен…

  • Объявление и инициализация массивов

    Для объявления массива в языке Си используется следующий синтаксис: тип имя[размерность]={инициализация}; Инициализация представляет собой набор…