На этом шаге мы рассмотрим еще одну конструкцию цикла.
Кроме операторов цикла, которые мы рассматривали на предыдущих шагах, есть еще один цикл foreach, который называется циклом по коллекции. Он может использоваться для перебора элементов в массиве. Синтаксис описания цикла по коллекции такой:
foreach (тип переменная in массив) { // Команды }
В круглых скобках после ключевого слова foreach объявляется локальная переменная. Она доступна только в теле цикла. При объявлении переменной указывается ее тип и название. После имени переменной указывается ключевое слово in и название массива, элементы которого перебираются в процессе выполнения цикла. Команды, выполняемые за каждый цикл, указываются в фигурных скобках после foreach-инструкции. Конструкция выполняется следующим образом. Объявленная в foreach-инструкции переменная последовательно принимает значения элементов массива, указанного после ключевого слова in. Таким образом, в отличие от "классической" циклической конструкции for, где элементы массива перебираются с помощью индексной переменной, в данном случае перебираются не индексы элементов, а сами элементы.
Небольшой пример использования этой конструкции приведен ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr55_1 { class Program { static void Main() { // Целочисленный массив: int[] nums = {1, 3, 4, 8, 9}; // Символьный массив: char[] symbs = {'a', 'b', 'A', 'B', 'Ы'}; // Текстовый массив: String[] txts = {"красный", "желтый", "синий"}; Console.WriteLine("Целочисленный массив") ; // Циклы по целочисленному массиву: foreach(int s in nums){ Console.WriteLine("Число {0} - {1}", s, s % 2==0 ? "четное" : "нечетное"); } Console.WriteLine("Символьный массив"); // Цикл по символьному массиву: foreach(char s in symbs) { Console.WriteLine("Код символа {0} - {1}", s, (int)s); } Console.WriteLine("Текстовый массив"); // Цикл по текстовому массиву: foreach(string s in txts){ Console.WriteLine("В слове \"{0}\" {1} букв", s, s.Length); } // Задержка: Console.ReadLine(); } } }
Результат выполнения программы таков.
Рис.1. Результат работы приложения
В программе создается три массива:
Console.WriteLine("Число {0} - {1}", s, s % 2==0 ? "четное" : "нечетное");
s % 2==0 ? "четное" : "нечетное" .
В выражении использован тернарный оператор. Значением выражения является текст "четное", если истинно условие s%2==0 (остаток отделения на 2 значения элемента массива равен нулю). Если условие s%2==0 ложно, то значением выражения
s % 2==0 ? "четное" : "нечетное" .
Во второй конструкции цикла переменная s последовательно принимает значения элементов из массива symbs. Для каждого такого значения отображается сам символ и его код. В теле цикла использована команда
Console.WriteLine("Код символа {0} - {1}", s, (int)s); .
В третьей конструкции цикла переменная s принимает значения элементов из текстового массива txts. Для каждого элемента массива вычисляется количество символов в тексте. Для этого использована инструкция s.Length. Текстовое значение элемента и количество символов в тексте отображаются с помощью команды
Console.WriteLine("В слове \"{0}\" {1} букв", s, s.Length); .
При отображении текстового сообщения командой
Console.WriteLine("В слове \"{0}\" {1} букв", s, s.Length); .
На следующем шаге мы рассмотрим двумерные массивы.