> For the complete documentation index, see [llms.txt](https://lessons.sannybuilder.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lessons.sannybuilder.com/00300/00100/000125.-blochnye-konstrukcii.-cikl-foreach.md).

# 000125. Блочные конструкции. Цикл foreach

Блочные конструкции. Цикл foreach||wmysterio|wmysterio|<wmysterio@yandex.ru>|||Всем привет! Мы продолжаем изучать блочные конструкции, и на этот раз я хотел бы рассказать ещё об одном виде циклов - foreach. Как я уже говорил в предыдущих уроках, переводится название как "**Для каждого**". По функционалу он очень поход на цикл "**Для**"(for), но отличается тем, что у него явно не указывается счётчик. Счётчиком выступает элемент какой-то коллекции, в этом предназначение. Как привило этот цикл используют тогда, когда в массиве(или другой коллекции) неизвестное количество элементов. Сама конструкция выглядит следующим образом:<br>

| <p>...<br>foreach (<strong>ТипКоллекции</strong> <strong>Индекс</strong> in <strong>ПеременнаяКоллекции</strong>) {<br>     // Действие над <strong>Индекс</strong><br>}<br>...<br></p> |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Что бы вы могли понять лучше, вот простой пример: создаём массив и заполняем его числом 2:<br>

| <p>...<br>int\[] <strong>MyArray</strong> = new int\[50];<br><br>foreach (int <strong>Item</strong> in <strong>MyArray</strong>) {<br>     <strong>MyArray</strong>\[<strong>Item</strong>] = 2;<br>}<br>...<br></p> |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

В качестве индекса могут выступать целые объекты классов, структур и.т.п. Вот простенький пример: есть массив структур, заполненный данными. Что бы усложнить задание, мы сгенерируем количество элементов, затем получим данные из элемента :<br>

| <p>...<br>public struct Student {<br>     public string Name = "MyName";<br>     public int Year = 2;<br>}<br>public Random Rnd = new Random();<br>...<br>Student\[] <strong>MyArray</strong> = new Student\[Rnd.Next(1, 120)];<br><br>foreach (Student <strong>Item</strong> in <strong>MyArray</strong>) {<br>     string Name = <strong>Item</strong>.Name;<br>     int Year = <strong>Item</strong>.Year;<br>}<br>...<br></p> |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Важно! Цикл foreach работает не для всех коллекций! бывают случаи, что коллекции просто не поддерживают использование этого цикла.\
\
Давайте напишем скрипт для GTA 4, что бы при нажатии кнопки **tab**, мы получали массив педов и дали каждому оружие а также пометим маркером их на радаре:Кодusing System;\
using System.Windows.Forms;\
using GTA;\
\
namespace TestScript {\
&#x20; public class Thread : Script {\
&#x20; public Thread() {\
&#x20; while (true) {\
&#x20; if(Game.isKeyPressed(Keys.Tab)){\
&#x20; Ped\[] PedArrey = World.GetAllPeds();\
&#x20; foreach (Ped CurrentPed in PedArrey) {\
&#x20; if (CurrentPed.isAlive) {\
&#x20; CurrentPed.Weapons.MP5.Ammo = 500;\
&#x20; CurrentPed.AttachBlip();\
&#x20; }\
&#x20; }\
&#x20; }\
&#x20; Wait(0);\
&#x20; }\
&#x20; }\
&#x20; }\
}Результат:\
[![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/s58190709.jpg)](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/58190709.png)\
\
Следует учесть, что количество актёров в массиве всегда разное, так как люди генерируются вблизи игрока и в зависимости от скорости создания актёров и дистанции прорисовки.\
\
Надеюсь этот цикл станет вашим другом ![smile](http://s49.ucoz.net/sm/15/smile.gif)|602|1|0|58190709`png`600`372`400\`248||blochnye\_konstrukcii\_cikl\_foreach|1392798763
