Передача многомерных массивов в качестве аргументов 


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



ЗНАЕТЕ ЛИ ВЫ?

Передача многомерных массивов в качестве аргументов



 

Инициализированный многомерный массив передаётся методу так же, как и одномерный массив:

 

int[,] theArray = { { 1, 2 }, { 2, 3 }, { 3, 4 } };

Print2DArray(theArray);

 

В следующем примере кода показано частичное объявление метода Print, который принимает в качестве аргумента двумерный массив:

 

void Print2DArray(int[,] arr)

{

// Код метода

}

 

Инициализацию и передачу нового массива можно выполнить в рамках одного шага, как показано в следующем примере:

 

Print2DArray(new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } });

 

В следующем примере двумерный массив целых чисел инициализируется и передается в метод Print2DArray. Затем метод отображает элементы этого массива:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Print2DArray(int[,] arr)

{

// Выводим на экран элементы массива

for (int i = 0; i < arr.GetLength(0); i++)

{

for (int j = 0; j < arr.GetLength(1); j++)

{

Console.WriteLine("Элемент({0},{1})={2}", i, j, arr[i, j]);

}

}

}

 

static void Main()

{

// Заполняем массив

Print2DArray(new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } });

Console.WriteLine("\nДля продолжения нажмите любую клавишу...");

Console.ReadKey();

}

}

}

/* Выведет:

* Элемент(0,0)=1

* Элемент(0,1)=2

* Элемент(1,0)=3

* Элемент(1,1)=4

* Элемент(2,0)=5

* Элемент(2,1)=6

* Элемент(3,0)=7

* Элемент(3,1)=8

* Для продолжение нажмите любую клавишу...

*/

 

6. Массивы массивов (ступенчатый или зубчатый массив)

 

Массив массивов — это массив, элементы которого сами являются массивами. Элементы массива массивов могут иметь различные размеры и измерения. Массивы массивов иногда также называются «не выровненными массивами». В следующих примерах показано, как выполняется объявление, инициализация и доступ к массивам массивов. Такие массивы ещё называют «ступенчатыми» и «зубчатыми».

 

Ниже показано объявление одномерного массива, включающего три элемента, каждый из которых является одномерным массивом целых чисел:

 

int[][] jaggedArray = new int[3][];

 

Перед использованием jaggedArray его элементы нужно инициализировать. Сделать это можно следующим образом:

 

jaggedArray[0] = new int[5];

jaggedArray[1] = new int[4];

jaggedArray[2] = new int[2];

 

Каждый элемент представляет собой одномерный массив целых чисел. Первый элемент массива состоит из пяти целях чисел, второй — из четырёх и третий — из двух.

Для заполнения элементов массива значениями можно также использовать инициализаторы, при этом размер массива знать не требуется. Пример:

 

jaggedArray[0] = new int[] { 1, 3, 5, 7, 9 };

jaggedArray[1] = new int[] { 0, 2, 4, 6 };

jaggedArray[2] = new int[] { 11, 22 };

 

Также массив можно инициализировать путем объявления:

 

int[][] jaggedArray2 = new int[][]

{

new int[] {1, 3, 5, 7, 9},

new int[] {0, 2, 4, 6},

new int[] {11, 22}

};

 

Также можно использовать сокращенную форму. Обратим внимание, что при инициализации элементов оператор new опускать нельзя, так как инициализации по умолчанию для этих элементов не существует:

 

int[][] jaggedArray3 =

{

new int[] {1, 3, 5,7, 9},

new int[] {0, 2, 4, 6},

new int[] {11, 22}

};

 

Не выровненный массив является массивом массивов и поэтому его элементы являются ссылочными типами и инициализируются значением null.

Доступ к отдельным элементам массива выполняется следующим образом:

 

jaggedArray3[0][1] = 77; // Второй элемент первого массива

jaggedArray3[2][1] = 88; // Второй элемент третьего массива

 

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

 

int[][,] jaggedArray4 = new int[3][,]

{

new int[,] { {1,3}, {5,7} },

new int[,] { {0,2}, {4,6}, {8,10} },

new int[,] { {11,22}, {99,88}, {0,9} }

};

 

Доступ к отдельным элементам выполняется, как показано в примере ниже, где отображено значение элемента [1,0] первого массива (значение 5):

 

Console.Write("{0}", jaggedArray4[0][1, 0]);

 

Метод Length возвращает число массивов, содержащихся в массиве массивов. Например, если объявить предыдущий массив, мы получим следующее:

 

Console.WriteLine(jaggedArray4.Length);

 

Код выше вернёт 3.

 

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

 

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

 

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

 

Пример использования:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main()

{

int[][] arr = new int[2][];

arr[0] = new int[5] { 1, 3, 5, 7, 9 };

arr[1] = new int[4] { 2, 4, 6, 8 };

 

for (int i = 0; i < arr.Length; i++)

{

Console.Write("Элемент({0}): ", i);

 

for (int j = 0; j < arr[i].Length; j++)

{

Console.Write("{0}{1}", arr[i][j], j == (arr[i].Length - 1)? "": " ");

}

Console.WriteLine();

}

Console.WriteLine("\nДля продолжения нажмите любую клавишу...");;

Console.ReadKey();

}

}

}

/* Выведет:

* Элемент(0): 1 3 5 7 9

* Элемент(1): 2 4 6 8

* Для продолжение нажмите любую клавишу...

*/

 

И ещё один пример реализации таких массивов:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main(string[] args)

{

int i = 0;

// Объявляем ступенчаты массив

int[][] myArr = new int[4][];

myArr[0] = new int[4];

myArr[1] = new int[6];

myArr[2] = new int[3];

myArr[3] = new int[4];

// Инициализируем ступенчатый массив

for (; i < 4; i++)

{

myArr[0][i] = i;

Console.Write("{0}\t",myArr[0][i]);

}

Console.WriteLine();

 

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

{

myArr[1][i] = i;

Console.Write("{0}\t", myArr[1][i]);

}

Console.WriteLine();

 

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

{

myArr[2][i] = i;

Console.Write("{0}\t", myArr[2][i]);

}

Console.WriteLine();

 

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

{

myArr[3][i] = i;

Console.Write("{0}\t", myArr[3][i]);

}

Console.WriteLine("\nДля продолжения нажмите любую клавишу...");;

Console.ReadKey();

}

}

}

 

Реализованный кодом выше массив выглядит так:

 

Рис. 6. 1. Созданный кодом выше массив массивов и элемент myArr[1,4]

 

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

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

 



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 338; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.234.141 (0.016 с.)