Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Многомерные массивы






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

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

Например:

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. Обратите внимание, обеспечивается только возможность чтения элементов массива, не допуская их изменения.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.