foreach(тип идентификатор in массив) оператор




Цикл работает в полном соответствии со своим названием – тело цикла выполняется для каждого элемента в контейнере. Тип идентификатора должен быть согласован с типом элементов, хранящихся в массиве данных. Предполагается также, что элементы массива упорядочены. На каждом шаге цикла идентификатор, задающий текущий элемент массива, получает значение очередного элемента в соответствии с порядком, установленным на элементах массива. С этим текущим элементом и выполняется тело цикла - выполняется столько раз, сколько элементов находится в массиве. Цикл заканчивается, когда полностью перебраны все элементы массива.

В приведённом ниже примере показана работа с трёхмерным массивом. Массив создаётся с использованием циклов типа for, а при нахождении суммы его элементов, минимального и максимального значения используется цикл foreach:

viewplaincopytoclipboardprint?

  1. int [,,] arr3d = new int[10, 10, 10];
  2. for(int i = 0; i < 10; i++)
  3. for(int j = 0; j < 10; j++)
  4. for(int k = 0; k < 10; k++)
  5. arr3d[i, j, k] = int.Parse(Console.ReadLine());
  6. long sum = 0;
  7. int min = arr3d[0, 0, 0], max = arr3d[0, 0, 0];
  8. foreach(int item in arr3d)
  9. {
  10. sum += item;
  11. if(item > max) max = item;
  12. else if (item < min) min = item;
  13. }
  14. Console.WriteLine("sum = {0}, min = {1}, max = {2}",
  15. sum, min, max);

Серьёзным недостатком циклов foreach в языке C# является то, что цикл работает только на чтение, но не на запись элементов. Так что наполнять массив элементами приходится с помощью других операторов цикла.

Поговорим теперь о многомерных массивах. Я уже показывал в примерах, что они задаются следующей формой:

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

Число запятых, увеличенное на единицу, и задаёт размерность массива. Что касается объявителей, то всё, что сказано для одномерных массивов, справедливо и для многомерных. Можно лишь отметить, что хотя явная инициализация с использованием многомерных константных массивов возможна, но применяется редко из-за громоздкости такой структуры. Проще инициализацию реализовать программно, но иногда она всё же применяется. Вот пример:

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

2) Класс Array:

Нельзя понять многие детали работы с массивами в C#, если не знать устройство класса Array из библиотеки FCL, потомками которого по определению являются все классы-массивы. Рассмотримследующиеобъявления:

int[] ar1 = new int[5];
double[] ar2 = {5.5, 6.6, 7.7};
int[,] ar3 = new Int32[3,4];

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

У всех классов, являющихся массивами, много общего, поскольку все они являются потомками класса System.Array. Класс System.Array наследует ряд интерфейсов: ICloneable, IList, ICollection, IEnumerable, а, следовательно, обязан реализовать все их методы и свойства. Помимо наследования свойств и методов класса Object и вышеперечисленных интерфейсов, класс Array имеет довольно большое число собственных методов и свойств. Взгляните, как выглядит отношение наследования на семействе классов, определяющих массивы.

Благодаря такому мощному родителю, над массивами определены самые разнообразные операции – копирование, поиск, обращение, сортировка, получение различных характеристик. Статические методы класса Array позволяют решать самые разнообразные задачи:

· Свойство Length возвращает длину массива

· Свойство Rank возвращает размерность массива

· Статический метод BinarySearch() выполняет бинарный поиск в отсортированном массиве

· Статический метод Clear() очищает массив, устанавливая для всех его элементов значение по умолчанию

· Статический метод Copy() копирует часть одного массива в другой массив

· Статический метод Exists() проверяет, содержит ли массив определенный элемент

· Статический метод Find() находит элемент, который удовлеворяет определенному условию

· Статический метод FindAll() находит все элементы, которые удовлеворяет определенному условию

· Статический метод IndexOf() возвращает индекс элемента

· Статический метод Resize() изменяет размер одномерного массива

· Статический метод Reverse() располагает элементы массива в обратном порядке

· Статический метод Sort() сортирует элементы одномерного массива

 



Поделиться:




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

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-10-12 Нарушение авторских прав и Нарушение персональных данных


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