pairs()
и ipairs()
немного отличаются.
pairs()
возвращает пары ключ-значение и в основном используется для ассоциативных таблиц.Порядок ключей не указан. ipairs()
возвращает пары индекс-значение и в основном используется для числовых таблиц.Нечисловые ключи в массиве игнорируются, а порядок индексов является детерминированным (в числовом порядке).
Это иллюстрируется следующим фрагментом кода.
> u={}
> u[1]="a"
> u[3]="b"
> u[2]="c"
> u[4]="d"
> u["hello"]="world"
> for key,value in ipairs(u) do print(key,value) end
1 a
2 c
3 b
4 d
> for key,value in pairs(u) do print(key,value) end
1 a
hello world
3 b
2 c
4 d
>
Когда высоздать таблицы без ключей (как в вашем вопросе), он ведет себя как числовой массив и поведение или пары и пары идентичны.
a = {"one", "two", "three"}
эквивалентно a[1]="one"
a[2]="two"
a[3]="three"
и pairs()
и ipairs()
будут идентичны (за исключением порядка, который не гарантируется в pairs()
).