Jump to content

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


Evgen

Recommended Posts

Расскажите про эти штуки, из документации по луа не до конца понял про разницу. 

Сейчас работаю только с pairs, не пойму зачем нужен ipairs?

Link to comment
Share on other sites

Что такое 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 → словари, смешанные таблицы, «дырявые» массивы.


 

 
Edited by Noise PC
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...