Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для DmitriyVasilev
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.01.2019
    Сообщений
    86
    Репутация:
    0 ±

    Вопрос про foreach и for

    Здравствуйте, подскажите, в каких случаях foreach лучше, а в каких лучше использовать for

  2. #2
    Аватар для x86
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.01.2019
    Сообщений
    41
    Репутация:
    6 ±
    Foreach - это обертка над for для использования итераторов. Первый лучше использовать тогда, когда нужно использовать значения из диапазона [0,size) в упорядоченном виде. For для всех других случаев.

    Пример:
    У нас на сервере есть только 3 игрока с идентификаторами 3, 10, 204
    1. foreach (new p : Player) {
    2. printf("%d ", p);
    3. }

    Выведет: 3 10 204

    Если бы мы использовали for, то нам пришлось бы всегда проверять занятость слота.
    1. for (new i = 0; i < MAX_PLAYERS; ++i) {
    2. continue;
    3. printf("%d ", i);
    4. }

    Выведет тоже самое.

    Различие лишь в том, что значения в первом примере записываются в итератор и не проверяются. Итератор - Player. На данном форуме есть статья про итераторы в Pawn (http://pro-pawn.ru/showthread.php?15081).
    Последний раз редактировалось x86; 02.02.2019 в 18:15.

  3. Пользователь сказал cпасибо:
    DmitriyVasilev (09.02.2019)
  4. #3
    Аватар для DmitriyVasilev
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.01.2019
    Сообщений
    86
    Репутация:
    0 ±
    а можете пример показать где лучше for юзать

  5. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Везде, где нельзя применять foreach.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  6. #5
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Можешь использовать foreach везде, только нужно создать свой итератор. Чекай тут
    Из гайда по Русски:
    PHP код:
    new Iterator:OwnedVehicles[MAX_PLAYERS]<MAX_VEHICLES>; //Создаешь массив 
    PHP код:
    Iter_Init(OwnedVehicles); //Даешь понять, что это итератор в OnGameModeInit например 
    PHP код:
    Iter_Add(OwnedVehicles[5], 5); //Добавляешь игроку с id 5 автомобиль с id 5 
    PHP код:
    foreach (new OwnedVehicles[5]) //Парсишь id машин, которые находятся у игрока 5 
    По поводу "что лучше" - ничего.

  7. Пользователь сказал cпасибо:
    Josan_Solomon (13.08.2019)
  8. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Далеко не везде это будет уместно. Подробнее описал тут всю "проблему"
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •