一、区别
pairs()函数可以遍历整个table,即包括数组和非数组部分;
ipairs()函数只用于遍历 table中的数组部分。
二、举例
1)
- local tabFiles = {
- "a",
- "b",
- [4] = "c" , --正好3,4连着,如果后二者为7,8,则iparis只输出前两个
- [3] = "d",
- }
- for k, v in ipairs(tabFiles) do
- print(k, v)
- end
输出: 如果换成pairs:
1 a 1 a
2 b 2 b
3 d 4 c
4 c 3 d
2)
- local tabFiles = {
- [3] = "test2", --若换成[1]="XXX",则只输出第一条。ipairs只从索引1开始
- [6] = "test3",
- [4] = "test1"
- }
- for k, v in ipairs(tabFiles) do
- print(k, v)
- end
输出: 如果换成pairs:
3 test2
6 test3
4 test1
3)
- tbl = {"alpha", "beta", [3] = "uno", ["two"] = "dos"}
- for i,v in ipairs(tbl) do --输出前三个
- print( tbl[i] )
- end
- for i,v in pairs(tbl) do --全部输出
- print( tbl[i] )
- end
4)
- mytable = {[1]="a1",
- [2] ="a2",
- [3] = "a3",
- [5] = "a4",
- [6] = "a5"}
- for i,v in ipairs(mytable) do
- print( tbl[i] )
- end
输出: 如果换成pairs:
1 a1 6 a5
2 a2 2 a2
3 a3 3 a3
1 a1
5 a4
有一个要注意的是pairs()的一个问题,用pairs()遍历是[key]-[value]形式的表是随机的,跟key的哈希值有关系。
5)
lines={
luaH_aet=10,
luaH_het=20,
luaH_present=30
}
a={}
for n in pairs(lines) do
a[#a+1]=n
end
table.sort(a)
luaH_aet=10,
luaH_het=20,
luaH_present=30
}
a={}
for n in pairs(lines) do
a[#a+1]=n
end
table.sort(a)
for i,n in ipairs(a) do --没输出
print(n)
end
输出:
luaH_aet
luaH_het
luaH_present
luaH_het
luaH_present
三、效率
http://blog.csdn.net/tony7758/article/details/6334001