000125. Блочные конструкции. Цикл foreach
Last updated
Last updated
Блочные конструкции. Цикл foreach||wmysterio|wmysterio|wmysterio@yandex.ru|||Всем привет! Мы продолжаем изучать блочные конструкции, и на этот раз я хотел бы рассказать ещё об одном виде циклов - foreach. Как я уже говорил в предыдущих уроках, переводится название как "Для каждого". По функционалу он очень поход на цикл "Для"(for), но отличается тем, что у него явно не указывается счётчик. Счётчиком выступает элемент какой-то коллекции, в этом предназначение. Как привило этот цикл используют тогда, когда в массиве(или другой коллекции) неизвестное количество элементов. Сама конструкция выглядит следующим образом:
... foreach (ТипКоллекции Индекс in ПеременнаяКоллекции) { // Действие над Индекс } ... |
Что бы вы могли понять лучше, вот простой пример: создаём массив и заполняем его числом 2:
... int[] MyArray = new int[50]; foreach (int Item in MyArray) { MyArray[Item] = 2; } ... |
В качестве индекса могут выступать целые объекты классов, структур и.т.п. Вот простенький пример: есть массив структур, заполненный данными. Что бы усложнить задание, мы сгенерируем количество элементов, затем получим данные из элемента :
... public struct Student { public string Name = "MyName"; public int Year = 2; } public Random Rnd = new Random(); ... Student[] MyArray = new Student[Rnd.Next(1, 120)]; foreach (Student Item in MyArray) { string Name = Item.Name; int Year = Item.Year; } ... |
Важно! Цикл foreach работает не для всех коллекций! бывают случаи, что коллекции просто не поддерживают использование этого цикла.
Давайте напишем скрипт для GTA 4, что бы при нажатии кнопки tab, мы получали массив педов и дали каждому оружие а также пометим маркером их на радаре:Кодusing System;
using System.Windows.Forms;
using GTA;
namespace TestScript {
public class Thread : Script {
public Thread() {
while (true) {
if(Game.isKeyPressed(Keys.Tab)){
Ped[] PedArrey = World.GetAllPeds();
foreach (Ped CurrentPed in PedArrey) {
if (CurrentPed.isAlive) {
CurrentPed.Weapons.MP5.Ammo = 500;
CurrentPed.AttachBlip();
}
}
}
Wait(0);
}
}
}
}Результат:
Следует учесть, что количество актёров в массиве всегда разное, так как люди генерируются вблизи игрока и в зависимости от скорости создания актёров и дистанции прорисовки.
Надеюсь этот цикл станет вашим другом |602|1|0|58190709png
600372
400`248||blochnye_konstrukcii_cikl_foreach|1392798763