Массивы
Массив как объект
Мы уже говорили о том, что массивы в С# реализованы как объекты. Если говорить более точно, то они реализованы на основе базового класса Array, определенного в пространстве имен System. Данный класс содержит различные свойства и методы. Например, свойство Length позволяет определять количество элементов в массиве. Преобразуем предыдущий пример:
class Program { static void Print(int[] a) // передаем только ссылку на массив { for (int i = 0; i < a.Length; i++) Console.Write("{0} ", a[i]); Console.WriteLine(); } static void Change(int[] a) { for (int i = 0; i < a.Length; i++) if (a[i] > 0) a[i] = 0; } static void Main() { int[] myArray = { 0, -1, -2, 3, 4, 5, -6, -7, 8, -9 }; Print(myArray); Change(myArray); Print(myArray); } }
Другие свойства и методы класса Array приведены в следующей таблице:
Вызов статических методов происходит через обращение к имени класса, например, Array.Sort(myArray). В данном случае мы обращаемся к статическому методу Sort класса Array и передаем данному методу в качестве параметра объект myArray - экземпляр класса Array.
Обращение к свойству или вызов экземплярного метода производится через обращение к экземпляру класса, например, myArray.Length или myArray.GetValue(i).
Пример:
class Program { static void Main() { try { int[] MyArray; Console.Write("Введите размерность массива: "); int n = int.Parse(Console.ReadLine()); MyArray = new int[n]; for (int i = 0; i < MyArray.Length; ++i) { Console.Write("a[{0}]=",i); MyArray[i] = int.Parse(Console.ReadLine()); } PrintArray("исходный массив:", MyArray); Array.Sort(MyArray); PrintArray("массив отсортирован по возрастанию", MyArray); Array.Reverse(MyArray); PrintArray("массив отсортирован по убыванию", MyArray); } catch (FormatException) { Console.WriteLine("неверный формат ввода данных"); } catch (OverflowException) { Console.WriteLine("переполнение"); } catch (OutOfMemoryException) { Console.WriteLine("недостаточно памяти для создания нового объекта"); } } static void PrintArray(string a, int[] mas) { Console.WriteLine(a); for (int i = 0; i < mas.Length; i++) Console.Write("{0} ", mas[i]); Console.WriteLine(); } } }
Многомерные массивы
Многомерные массивы имеют более одного измерения. Чаще всего используются двумерные массивы, которые представляют собой таблицы. Каждый элемент массива имеет два индекса, первый определяет номер строки, второй - номер столбца, на пересечении которых находится элемент. Нумерация строк и столбцов начинается с нуля.
Объявить двумерный массив можно одним из предложенных способов:
тип [,] имя__массива; тип [,] имя__массива = new тип [размер1, размер2]; тип [,] имя__массива={{элементы 1-ой строки}, … , {элементы n-ой строки}}; тип [,] имя__массива= new тип [,]{{элементы 1-ой строки}, … ,{элементы n-ой строки}}; строки}};
Например:
int [,] a; int [,] a= new int [3, 4]; int [,] a={{0, 1, 2}, {3, 4, 5}}; int [,] a= new int [,]{{0, 1, 2}, {3, 4, 5}};
- Как и в случае с одномерными массивами, последние два описания являются избыточными.
- При работе с многомерными массивами можно использовать приемы, которые мы рассмотрели для одномерных массивов.
- При обращении к свойству Length для двумерного массива мы получим общее количество элементов в массиве. Чтобы получить количество строк нужно обратиться к методу GetLength с параметром 0. Чтобы получить количество столбцов - к методу GetLength с параметром 1.
Пример:
class Program { static void PrintArray(string a, int[,] mas) { Console.WriteLine(a); for (int i = 0; i < mas.GetLength(0); i++) { for (int j = 0; j < mas.GetLength(1); j++) Console.Write("{0} ", mas[i, j]); Console.WriteLine(); } } static void Change(int[,] mas) { for (int i = 0; i < mas.GetLength(0); i++) for (int j = 0; j < mas.GetLength(1); j++) if (mas[i, j] % 2 == 0) mas[i, j] = 0; } static void Main() { try { int[,] MyArray ={ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; PrintArray("исходный массив:", MyArray); Change(MyArray); PrintArray("итоговый массив", MyArray); } catch (FormatException) { Console.WriteLine("неверный формат ввода данных"); } catch (OverflowException) { Console.WriteLine("переполнение"); } catch (OutOfMemoryException) { Console.WriteLine("недостаточно памяти для создания нового объекта"); } } }
- Добавьте в программу метод InputArray, предназначенный для ввода с клавиатуры элементов массива. Продемонстрируйте работу данного метода.
- Измените метод Change так, чтобы он вычислял сумму четных элементов двумерного массива.