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

    Статус
    Оффлайн
    Регистрация
    15.08.2015
    Сообщений
    106
    Репутация:
    8 ±

    Enumerators (enums) - Обращение по индексу

    Всем привет)
    Столкнулся с такой задачей, нужно прогнать энум через цикл.

    Пример:
    PHP код:
    enum Test
    {
      
    Nick1[MAX_PLAYER_NAME+1],
      
    Nick2[MAX_PLAYER_NAME+1]
    };
    new 
    NickTest[5][5][Test]; 
    Обращение в данном случае идет по ключу энума:
    PHP код:
    NickTest[0][0][Nick1];
    NickTest[0][0][Nick2]; 
    А мне надо что-то типа такого (по индексу):
    PHP код:
    NickTest[0][0][0];
    NickTest[0][0][1]; 
    Раньше кажется делал такое, только подзабыл.

  2. #2
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Можно сделать так:
    Код:
    NickTest[0][0][Test:0];

  3. #3
    Аватар для vasyok28
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.08.2015
    Сообщений
    106
    Репутация:
    8 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Можно сделать так:
    Код:
    NickTest[0][0][Test:0];
    Так не будет работать

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

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

    То бишь, вот этот код:
    PHP код:
    enum Test
    {
        
    Nick1[5],//1 член перечисления
        
    Nick2[5]//2 член перечисления
    };
    new 
    test[Test]; 
    Будет равносилен этому:
    PHP код:
    enum Test
    {
        
    Nick1_1,//1 член перечисления
        
    Nick1_2,//2 член перечисления
        
    Nick1_3,//3 член перечисления
        
    Nick1_4,//4 член перечисления
        
    Nick1_5,//5 член перечисления
        
    Nick2_1,//6 член перечисления
        
    Nick2_2,//7 член перечисления
        
    Nick2_3,//8 член перечисления
        
    Nick2_4,//9 член перечисления
        
    Nick2_5//10 член перечисления
    };
    new 
    test[Test]; 
    И когда ты, например, обращаешься к Nick2 в первом случае:
    PHP код:
    test[Nick2]; 
    Ты обращаешься не к массиву Nick2, а к 6-ому члену перечисления "Nick2_1".


    Короче, в enum нет массивов в обычном виде. Этот код:
    PHP код:
    enum Test
    {
        
    Nick1[5],//1 член перечисления
        
    Nick2[5]//2 член перечисления
    };
    new 
    test[Test]; 
    Не обозначает то, что ты создал двумерный массив test. Он означает лишь то, что ты создал одномерный массив из 10 ячеек. А уже константы "Nick1" и "Nick2" хранят в себе номера ячеек (0 и 5), которые как бы делят этот одномерный массив на две части.
    То же самое можно вручную сделать так:
    PHP код:
    new test[10];
    main()
    {
        
    strcat(test[0], "Test"5);// Указываем, что запись в массив начинается с нулевой ячейки (текст займёт место с нулевой по 4-ую ячейку)
        
    strcat(test[5], "Text"5);// А тут указываем, что запись в массив начинается с пятой ячейки (текст займёт место с пятой ячейки по 9-ую)

    И в 1 массиве будет 2 разных текста хранится.



    Скажи что ты конкретно хочешь сделать и мы уже подскажем тебе решение
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

 

 

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

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

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

Ваши права

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