Цикл foreach в C#
В этой статье вы познакомитесь с циклом foreach и научитесь применять этот оператор для перебора массивов и коллекций.
В C# есть простая в использовании и элегантная альтернатива циклу for. Цикл foreach во время работы с массивами и коллекциями выполняет итерацию по их элементам. Цикл foreach выполняет итерацию по каждому элементу — именно поэтому он называется foreach.
Синтаксис
foreach (элемент in итерируемый объект)
{
// тело цикла foreach
}
Блок-схема
Ключевое слово in
в цикле foreach используется для итерации по итерируемому объекту
. Это слово получает значение следующего элемента коллекции и присваивает его переменной элемент
.
Во время первой итерации цикла переменной элемент
присваивается значение первого элемента итерируемый объект
. На второй итерации — второго и т. д.
Количество итераций цикла foreach равно количеству элементов в массиве или коллекции.
Пример 1. Выводим элементы массива с помощью for
using System;
namespace Loop
{
class ForLoop
{
public static void Main(string[] args)
{
char[] myArray = {'П','р','и','в','е', 'т'};
for(int i = 0; i < myArray.Length; i++)
{
Console.WriteLine(myArray[i]);
}
}
}
}
То же самое можно сделать с помощью foreach.
Пример 2. Выводим элементов массива с помощью foreach
using System;
namespace Loop
{
class ForEachLoop
{
public static void Main(string[] args)
{
char[] myArray = {'П','р','и','в','е', 'т'};
foreach(char ch in myArray)
{
Console.WriteLine(ch);
}
}
}
}
Вывод у обеих программ одинаковый:
П
р
и
в
е
т
В программе выше происходит итерация по массиву myArray
. Например, во время первой итерации переменной ch
присваивается первый элемент массива — myArray[0]
.
То же самое происходит и на последней итерации — печатается ch
, которой присвоено значение myArray[5]
.
При сравнении может показаться, что цикл foreach проще понять и читать. Это благодаря простому и понятному синтаксису.
Следовательно, цикл foreach предпочтителен, если нам нужно провести итерацию по массиву или коллекции.
Пример 3. Обходим массив, содержащий данные о поле соискателя
using System;
namespace Loop
{
class ForEachLoop
{
public static void Main(string[] args)
{
char[] gender = {'м','ж','м','м','м','ж','ж','м','м','ж'};
int male = 0, female = 0;
foreach (char g in gender)
{
if (g == 'м')
male++;
else if (g =='ж')
female++;
}
Console.WriteLine("Количество мужчин = {0}", male);
Console.WriteLine("Количество женщин = {0}", female);
}
}
}
Вывод:
Количество мужчин = 6
Количество женщин = 4
Пример 4. Работа цикла foreach со списком (коллекцией)
Эта программа находит сумму элементов списка:
using System;
using System.Collections.Generic;
namespace Loop
{
class ForEachLoop
{
public static void Main(string[] args)
{
var numbers = new List() {5,-8,3,14,9,17,0,4};
int sum = 0;
foreach(int number in numbers)
{
sum += number;
}
Console.WriteLine("Сумма = {0}", sum);
}
}
}
Вывод:
Сумма = 44
В этой программе цикл foreach используется для обхода коллекции. Обход коллекции аналогичен обходу массива.
На первой итерации цикла number
присваивается значение первого элемента списка. На второй итерации — второго элемента списка. Цикл продолжается до тех пор, пока в списке остаются элементы.