1.
(1)
lines={
luaH_set=10,
luaH_get=24,
luaH_present=48,
}
a={}
for n in pairs(lines) do table.insert(a,n) end----->>循环遍历lines,将lines中的值插入名为a的table中
for i,n in ipairs(a) do print(n) end
结果:
luaH_present
luaH_set
luaH_get
for key,val in pairs(a) do print(val) end
结果:
luaH_present
luaH_set
luaH_get
(2)
table.sort(a)------->>如果加了排序,则pairs和ipairs的结果又不一样的,如下
for i,n in ipairs(a) do print(n) end
结果:
luaH_get
luaH_present
luaH_set
for key,val in pairs(a) do print(val) end
结果:
luaH_get
luaH_present
luaH_set
(3)
function pairsByKeys(t,f)
local a={}
for n in pairs(t) do table.insert(a,n) end
table.sort(a,f)
local i=0
local iter=function()
i=i+1
if a[i]==nil then return nil
else return a[i],t[a[i]]
end
end
return iter
end
for name,line in pairsByKeys(lines) do
print(name,line)
end
结果:
luaH_get 24
luaH_present 48
luaH_set 10
2.pairs和ipairs的区别:
for k,v in pairs(tbtest) do 这样的遍历顺序并非是tbtest中table的排列顺序,
而是根据tbtest中key的hash值排列的顺序来遍历的。当然,同时lua也提供了按照
key的大小顺序来遍历的,注意,是大小顺序,仍然不是key定义的顺序,这种遍历
方式就是for k,v in ipairs(tbtest) do。
for k,v in ipairs(tbtest) do 这样的循环必须要求tbtest中的key为顺序的,而
且必须是从1开始,ipairs只会从1开始按连续的key顺序遍历到key不连续为止。