설명
pairs는 내부의 hash 를 iterate 하고
ipairs는 1부터 시작하는 integer key를 iterate 한다.
(ipairs는 key 가 integer가 아닌 경우는 iterate 하지 못함)
다음 코드를 돌려보면 명확해짐
print("=================")
local a = {10, 20, 30}
for i,v in ipairs(a) do print(v) end
print("~~~~~~~~~~~~~~~~~~~~~~")
for i,v in pairs(a) do print(v) end
print("=================")
local b = {[0]=10, 20, 30}
for i,v in ipairs(b) do print(v) end
print("~~~~~~~~~~~~~~~~~~~~~~")
for i,v in pairs(b) do print(v) end
print("==================")
결과
=================
10
20
30
~~~~~~~~~~~~~~~~~~~~~~
10
20
30
=================
20
30
~~~~~~~~~~~~~~~~~~~~~~
20
30
10
==================
코드
numArray = {"One", "Two", "Three"}
revNumArray = {}
for k, v in pairs(numArray) do
revNumArray[v] = k
end
print("--pairs(numArray)----------------------------")
for k, v in pairs(numArray) do
print(k .. " : " .. v)
end
print("--pairs(revNumArray)----------------------------")
for k, v in pairs(revNumArray) do
print(k .. " : " .. v)
end
print("~~ipairs(numArray)~~~~~~~~~~~~~~~~~~~~~~~~~~")
for k, v in ipairs(numArray) do
print(k .. " : " .. v)
end
print("~~ipairs(revNumArray)~~~~~~~~~~~~~~~~~~~~~~~~~~")
for k, v in ipairs(revNumArray) do
print(k .. " : " .. v)
end
결과
--pairs(numArray)----------------------------
1 : One
2 : Two
3 : Three
--pairs(revNumArray)----------------------------
One : 1
Three : 3
Two : 2
~~ipairs(numArray)~~~~~~~~~~~~~~~~~~~~~~~~~~
1 : One
2 : Two
3 : Three
~~ipairs(revNumArray)~~~~~~~~~~~~~~~~~~~~~~~~~~
기타 :
실제 benchmark 해본 결과 ipairs보다 pairs가 더 빨랐다는 실험결과도 있음
I'm surprised that (as my colleague pointed out to me), in plain Lua, pairs is faster than ipairs.
http://lua-users.org/lists/lua-l/2009-11/msg01018.html
No comments:
Post a Comment