Просмотр полной версии : [Вопрос] Вопрос про foreach и for
DmitriyVasilev
02.02.2019, 18:03
Здравствуйте, подскажите, в каких случаях foreach лучше, а в каких лучше использовать for
Foreach - это обертка над for для использования итераторов. Первый лучше использовать тогда, когда нужно использовать значения из диапазона [0,size) в упорядоченном виде. For для всех других случаев.
Пример:
У нас на сервере есть только 3 игрока с идентификаторами 3, 10, 204
foreach (new p : Player) {
printf("%d ", p);
}
Выведет: 3 10 204
Если бы мы использовали for, то нам пришлось бы всегда проверять занятость слота.
for (new i = 0; i < MAX_PLAYERS; ++i) {
if (!IsPlayerConnected(i))
continue;
printf("%d ", i);
}
Выведет тоже самое.
Различие лишь в том, что значения в первом примере записываются в итератор и не проверяются. Итератор - Player. На данном форуме есть статья про итераторы в Pawn (http://pro-pawn.ru/showthread.php?15081).
DmitriyVasilev
22.07.2019, 15:52
а можете пример показать где лучше for юзать
Везде, где нельзя применять foreach.
Пельмень
01.08.2019, 18:48
Можешь использовать foreach везде, только нужно создать свой итератор. Чекай тут (https://forum.sa-mp.com/showthread.php?t=571159)
Из гайда по Русски:
new Iterator:OwnedVehicles[MAX_PLAYERS]<MAX_VEHICLES>; //Создаешь массив
Iter_Init(OwnedVehicles); //Даешь понять, что это итератор в OnGameModeInit например
Iter_Add(OwnedVehicles[5], 5); //Добавляешь игроку с id 5 автомобиль с id 5
foreach (new i : OwnedVehicles[5]) //Парсишь id машин, которые находятся у игрока 5
По поводу "что лучше" - ничего.
Далеко не везде это будет уместно. Подробнее описал тут (http://pro-pawn.ru/showthread.php?15081-%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B-%D0%B2-Pawn&p=88314&viewfull=1#post88314) всю "проблему"
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot