# 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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00300/00100/000125.-blochnye-konstrukcii.-cikl-foreach.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
