Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 398; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.188.245.152 (0.007 с.) |