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
выполняет итерацию по всем парам ключ-значение в таблице. Обратите внимание, что это не гарантируется итерацией в определенном порядке.