Перейти к содержанию

Чем отличаются pairs и ipairs в Lua и почему они иногда работают не так, как я ожидаю?


Рекомендуемые сообщения

Что такое pairs

  • Общий итератор для таблиц.

  • Обходит все ключи, порядок не гарантирован.

  • Пример кода:

 
t = { a = 1, b = 2, [3] = "hello" }

for k, v in pairs(t) do
    print(k, v)
end

Что такое ipairs

  • Итератор для «массива» (числовые последовательные индексы от 1).

  • Останавливается на первом nil.

  • Пример кода:

 
t = { "one", "two", "three" }

for i, v in ipairs(t) do
    print(i, v)
end

Важный момент: «дыры» в массивах

t = { "one", nil, "three" }

for i, v in ipairs(t) do
    print(i, v)
end

 

 
  • ipairs остановится на первом nil.

  • pairs обойдёт все ключи.


Когда использовать

  • ipairs → строго массивы, без пропусков.

  • pairs → словари, смешанные таблицы, «дырявые» массивы.


 

 
Изменено пользователем Noise PC
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...