Lua: повторять все пары в таблице

У меня есть редкая таблица lua, и мне нужно перебирать ее. Проблема в том, что, похоже, lua начинает итерацию в 1 и завершается, как только находит нулевое значение. Здесь и пример:

> tab={}
> tab[2]='b'
> tab[5]='e'
> for i,v in ipairs(tab) do print(i,v) end
>               --nothing is output here
> tab[1]='a'
> for i,v in ipairs(tab) do print(i,v) end
1   a
2   b
>               --terminates after 2 (first nil value is tab[3])

Есть ли способ получить желаемый результат:

1   a
2   b
5   e

Ответ 1

Вы должны использовать pairs вместо ipairs.

tab={}

tab[1]='a'
tab[2]='b'
tab[5]='e'

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

Будет выводиться (в любом порядке):

1   a
2   b
5   e

ipairs итерации по последовательным целочисленным клавишам, начиная с 1 и разбивая первую пару nil.

pairs выполняет итерацию по всем парам ключ-значение в таблице. Обратите внимание, что это не гарантируется итерацией в определенном порядке.