2012-09-25 25 views
10

Tengo una tabla lua dispersa y necesito iterar sobre ella. El problema es que parece que lua comienza la iteración en 1 y termina tan pronto como encuentra un valor nulo. Aquí es y ejemplo:lua: iterar a través de todos los pares en la tabla

> 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]) 

¿Hay alguna manera de obtener la salida deseada:

1 a 
2 b 
5 e 

Respuesta

26

Debe utilizar pairs en lugar de ipairs.

tab={} 

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

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

salida Will (en cualquier orden):

1 a 
2 b 
5 e 

ipairs itera sobre teclas enteros secuenciales, a partir de 1 y que se rompen en la primera nil par.

pairs itera sobre todos los pares clave-valor en la tabla. Tenga en cuenta que esto es no garantizado para iterar en un orden específico.

Cuestiones relacionadas