2012-01-21 38 views
15

Tôi đã đọc rằng việc sử dụng ipairs chậm so với vòng lặp for, tôi có nên thay đổi thói quen lập trình của mình không? Tôi sẽ sử dụng lua 5.2 một ngày, hiện tại là 5.1.Tôi có nên sử dụng ipairs hoặc vòng lặp cho

Mảng của tôi tối đa khoảng 1000 mục.

local mytbl = { 'a','b','c','e'} 
for i,v in ipairs(mytbl) do 
    print(i,v) 
end 

for i=1,#mytbl do 
    print(i,mytbl[i]) 
end 

Trả lời

26

http://springrts.com/wiki/Lua_Performance#TEST_9:_for-loops

pairs: 3.078 (217%) 
ipairs: 3.344 (236%) 
for i=1,x do: 1.422 (100%) 
for i=1,#atable do 1.422 (100%) 
for i=1,atable_length do: 1.562 (110%) 

Lưu ý, tuy nhiên, sử dụng một số for vòng lặp chỉ hoạt động nếu bạn đang iterating trên bảng với chỉ số số tuần tự - nếu bạn đang sử dụng các phím băm cho các bảng của bạn, hoặc bảng thưa thớt, sau đó bạn sẽ cần phải sử dụng một số hình thức pairs().

+0

Cảm ơn bảng hiệu suất. Một thời gian gấp đôi là thực sự không nhiều khi nói đến chỉ là một vài vòng, vì vậy tôi không có nhu cầu lớn để thay đổi mã hiện tại của tôi. Nhưng đối với các vòng trong tương lai, tôi biết bây giờ những gì tôi cần làm. Cảm ơn! – topskip

+6

Giống như tất cả các cân nhắc về hiệu suất, tất cả đều phụ thuộc vào ngữ cảnh. Premature tối ưu hóa là gốc rễ của tất cả các điều ác và whatnot. – Amber

+0

Bình luận của bạn nên đọc: ** "thì bạn sẽ cần phải sử dụng' cặp() '" ** Chỉ có hai "dạng cặp": 'cặp' và' ipairs'. Cái sau là chính xác tương đương với vòng lặp for: nó lặp lại bằng cách tăng chỉ số bằng số từ '1' sang' # t'. Nó sẽ không hoạt động trong các trường hợp ví dụ của bạn vì cùng một lý do mà vòng lặp 'for' sẽ không. – Mud

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