![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Передача многомерных массивов в качестве аргументовСодержание книги
Поиск на нашем сайте
Инициализированный многомерный массив передаётся методу так же, как и одномерный массив:
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; просмотров: 420; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.119.68 (0.01 с.) |