2012-09-25 17 views
10

Ho una tabella sparsa lua e ho bisogno di scorrere su di essa. Il problema è che sembra che lua inizi l'iterazione a 1 e termina non appena trova un valore nullo. Ecco e l'esempio:lua: itera su tutte le coppie nella tabella

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

Esiste un modo per ottenere il risultato desiderato:

1 a 
2 b 
5 e 

risposta

26

È necessario utilizzare pairs invece di ipairs.

tab={} 

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

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

uscita Will (in qualsiasi ordine):

1 a 
2 b 
5 e 

ipairs itera chiavi intere sequenziali, da 1 a rottura al primo nil coppia.

pairs itera su tutte le coppie chiave-valore nella tabella. Si noti che questo è non garantito per iterare in un ordine specifico.

Problemi correlati