Многомерные массивы. Многомерные массивы являются естественным обобщением одномерных.

Многомерные массивы являются естественным обобщением одномерных.

<тип>[, ... ,] <объявители>;

Например:

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

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

Дальнейшее использование массивов вполне традиционно. Например, можно заполнить весь массив содержимым следующим образом:

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

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

matrix[i, j]=i*j;

Обратим внимание, что для определения количества шагов в циклах перебора вместо свойства Length (общее количество элементов), нужно использовать метод GetLength с параметром – номером измерения.

4. Класс Array

В С# есть класс Array , потомками которого являются все классы-массивы.

Рассмотрим следующие объявления:

int[] ar1 = new int[5];

double[] ar2 ={5.5, 6.6, 7.7};

int[,] ar3 = new Int32[3,4];

Переменная ar1 принадлежит к классу int[] - одномерному массиву значений типа int, ar2 - double[] - одномерному массиву значений типа double, ar3 - двумерному массиву значений типа int. Но у этих переменных есть и общее. Прежде всего, все три класса этих объектов, как и другие классы, являются потомками класса Object, а потому имеют общие методы, наследованные от класса Object и доступные объектам этих классов.

Пример:

Разработать процедуру, формальный аргумент которой будет принадлежать родителю всех классов-массивов, что позволит передавать массив любого класса в качестве фактического аргумента.

Для того чтобы сохранить возможность работы с индексами, как в одномерном, так и в двумерном случае, пришлось организовать разбор случаев. Свойство Rank возвращает размерность массива. К элементам массива A класса Array нет возможности прямого доступа в обычной манере - A [<индексы>], но зато есть специальные методы GetValue (<индексы>) и SetValue (<индексы>).

рublic static void PrintARR(string name, Array A)

{

Console.WriteLine(name);

switch (A.Rank)

{

case 1:

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

Console.Write("{0} ", A.GetValue(i));

Console.WriteLine();

break;

case 2:

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

{

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

Console.Write ("{0} ", A.GetValue(i,j));

Console.WriteLine();

}

break;

default: break;

}

}

Вот как выглядит создание массивов и вызов процедуры печати:

static void Main()

{

ClassArray myarr = new ClassArray();

int[] ar1 = new int[5];

double[] ar2 = { 5.5, 6.6, 7.7 };

int[,] ar3 = new Int32[3, 4];

//задать массивам значения

myarr.PrintARR("ar1", ar1);

myarr.PrintARR("ar2", ar2);

myarr.PrintARR("ar3", ar3);

}

Например, в задачах, требующие однократного или многократного прохода по всему массиву, - нахождение суммы элементов, нахождение максимального элемента, печать элементов, вместо циклов типа for по каждому измерению достаточно рассмотреть единый цикл forеach. Обратите внимание, обеспечивается только возможность чтения элементов массива, не допуская их изменения.








Дата добавления: 2015-10-26; просмотров: 577;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.