2012-09-25 31 views
10

Tôi có một bảng lua thưa thớt và tôi cần phải lặp qua nó. Vấn đề là, có vẻ như lua bắt đầu lặp lại tại 1, và chấm dứt ngay sau khi nó tìm thấy một giá trị nil. Dưới đây là và Ví dụ:lua: lặp qua tất cả các cặp trong bảng

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

Có cách nào để có được những kết quả mong muốn:

1 a 
2 b 
5 e 

Trả lời

26

Bạn phải sử dụng pairs thay vì ipairs.

tab={} 

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

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

Will đầu ra (theo thứ tự):

1 a 
2 b 
5 e 

ipairs lặp trên các phím số nguyên liên tiếp, bắt đầu từ 1 và phá vỡ trên nil cặp đầu tiên.

pairs lặp lại tất cả các cặp khóa-giá trị trong bảng. Lưu ý rằng đây là không phải được đảm bảo lặp lại theo thứ tự cụ thể.

Các vấn đề liên quan