Оператор foreach

Оператор foreach применяется для перебора элементов в специальным обра­зом организованной группе данных. Массив является именно такой группой. Удобство этого вида цикла заключается в том, что нам не требуется определять количество элементов в группе и выполнять их перебор по индексу: мы про­сто указываем на необходимость перебрать все элементы группы.

Синтаксис оператора:

foreach (тип имя in выражение)

тело_цикла

Имя задает локальную по отношению к циклу переменную, которая будет по очереди принимать все значения из массива выражение (в качестве выражения чаще всего применяется имя массива или другой группы данных). В простом или составном операторе, представляющем собой тело цикла, выполняются дей­ствия с переменной цикла. Тип переменной должен соответствовать типу эле­мента массива.

Например, пусть задан массив:

int[] а = {24, 50, 18, 3, 16, -7, 9, -1 };

Вывод этого массива на экран с помощью оператора foreach выглядит следую­щим образом:

foreach (int x in a) Console.WriteLine(x);

Этот оператор выполняется так: на каждом проходе цикла очередной элемент массива присваивается переменной х и с ней производятся действия, записанные в теле цикла.

Ступенчатый массив из листинга 6.4 вывести на экран с помощью оператора foreach немного сложнее, чем одномерный, но все же проще, чем с помощью цикла for:

foreach (int[] x in a)

{

foreach (int у in x)

Console.Write("\t" + у);

Console.WriteLine();

}

В листинге 6.5 решается та же задача, что и в листинге 6.1, но с использованием цикла foreach. Обратите внимание на то, насколько понятнее стала программа.

Листинг 6.5. Работа с одномерным массивом с использованием цикла foreach

using System;

namespace ConsoleApplication1

{

class Class1

{

static void Main()

{

int[] a = { 3, 12, 5, -9, 8, -4 };

Console.WriteLine("Исходный массив:");

foreach (int elem in a)

Console.Write("\t" + elem);

Console.WriteLine();

long sum =0; // сумма отрицательных элементов

int num =0; // количество отрицательных элементов

foreach (int elem in a) if (elem < 0)

{

sum += elem;

++num;

}

Console.WriteLine("sum = " + sum);

Console.WriteLine("num = " + num);

int max = a[0]; // максимальный элемент

foreach (int elem in a)

if (elem > max) max = elem;

Console.WriteLine("max = " + max);

}

}

}

А вот как можно переписать метод вывода массива из листинга 6.3:

public static void PrintArray(string header, Array a)

{

Console.WriteLine(header);

foreach (object x in a)

Console.Write("\t" + x);

Console.WriteLine();

}

Такая запись становится возможной потому, что любой объект может быть неяв­но преобразован к типу его базового класса, а тип object, как вы помните, являет­ся корневым классом всей иерархии. Когда вы продвинетесь в изучении С# до раздела «Виртуальные методы» (см. с. 178), вы поймете механизм выполнения этого кода, а пока можете просто им пользоваться.

ВНИМАНИЕ

Ограничением оператора foreach является то, что с его помощью можно только просматривать значения в группе данных, но не изменять их.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: