小羊驼和你一起学习cocos2d-x与lua之一(迭代器pairs 和 ipairs区别)
2013-04-03 15:24
357 查看
标准库提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的
(string.gmatch)等等
pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil;
但是ipairs则不能返回nil,只能返回数字0,如果遇到nil则退出。它只能遍历到表中出现的第一个不是整数的key
下面举个例子吧!
eg:
local tabFiles = {
[3] = "test2",
[6] = "test3",
[4] = "test1"
}
for k, v in ipairs(tabFiles)
do
print(k, v)
end
猜测它的输出结果是什么呢?
根据刚才的分析,它在 ipairs(tabFiles) 遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。
>lua -e "io.stdout:setvbuf 'no'"
"Test.lua"
>Exit code: 0
那么,如果是
for k, v in pairs(tabFiles)
do
print(k, v)
end
则会输出所有 :
>lua -e "io.stdout:setvbuf 'no'"
"Test.lua"
3 test2
6 test3
4 test1
>Exit code: 0
现在改变一下表内容,
local tabFiles = {
[1] = "test1",
[6] = "test2",
[4] = "test3"
}
for k, v in ipairs(tabFiles)
do
print(k, v)
end
现在的输出结果显而易见就是key=1时的value值test1
>lua -e "io.stdout:setvbuf 'no'"
"Test.lua"
1 test1
>Exit code: 0
--[示例1.]--
local tt =
{
[1] = "test3",
[4] = "test4",
[5] = "test5"
}
for i,v in pairs(tt)
do -- 输出 "test4" "test3""test5"
print( tt[i] )
end
for i,v in ipairs(tt)
do -- 输出 "test3" k=2时断开
print( tt[i] )
end
-- [[示例2.]] --
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
(string.gmatch)等等
pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil;
但是ipairs则不能返回nil,只能返回数字0,如果遇到nil则退出。它只能遍历到表中出现的第一个不是整数的key
下面举个例子吧!
eg:
local tabFiles = {
[3] = "test2",
[6] = "test3",
[4] = "test1"
}
for k, v in ipairs(tabFiles)
do
print(k, v)
end
猜测它的输出结果是什么呢?
根据刚才的分析,它在 ipairs(tabFiles) 遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。
>lua -e "io.stdout:setvbuf 'no'"
"Test.lua"
>Exit code: 0
那么,如果是
for k, v in pairs(tabFiles)
do
print(k, v)
end
则会输出所有 :
>lua -e "io.stdout:setvbuf 'no'"
"Test.lua"
3 test2
6 test3
4 test1
>Exit code: 0
现在改变一下表内容,
local tabFiles = {
[1] = "test1",
[6] = "test2",
[4] = "test3"
}
for k, v in ipairs(tabFiles)
do
print(k, v)
end
现在的输出结果显而易见就是key=1时的value值test1
>lua -e "io.stdout:setvbuf 'no'"
"Test.lua"
1 test1
>Exit code: 0
--[示例1.]--
local tt =
{
[1] = "test3",
[4] = "test4",
[5] = "test5"
}
for i,v in pairs(tt)
do -- 输出 "test4" "test3""test5"
print( tt[i] )
end
for i,v in ipairs(tt)
do -- 输出 "test3" k=2时断开
print( tt[i] )
end
-- [[示例2.]] --
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
相关文章推荐
- 小羊驼和你一起学习cocos2d-x与lua之五(lua编写cocos2d-x游戏)
- 小羊驼和你一起学习cocos2d-x之六(lua、android.mk)
- 小羊驼和你一起学习cocos2d-x与lua之三(lua匿名函数)
- 小羊驼和你一起学习cocos2d-x与lua之零(lua教程 高清无码你懂 请好评吧 绝对极品)
- 小羊驼和你一起学习cocos2d-x与lua之五(HelloLua分析)
- 小羊驼和你一起学习cocos2d-x与lua之四(泛型for学习)
- 小羊驼和你一起学习cocos2d-x与lua之六(lua编写cocos2d-x注意事项)
- 小羊驼和你一起学习cocos2d-x与lua之二(表达式特殊写法)
- 小羊驼和你一起学习cocos2d-x之三(进度条、CCProgressTimer)
- 小羊驼和你一起学习cocos2d-x之一(异步加载资源利用addImageAsync)
- 小羊驼和你一起学习cocos2d-x之四(摇杆)
- 小羊驼和你一起学习cocos2d-x之二(屏幕匹配、多分辨率解决方案、分辨率适配)
- 小羊驼和你一起学习cocos2d-x之五(结合摇杆控制玩家走动)
- 小羊驼和你一起学习cocos2d-x之八(tinyXml android cocos2d-x 2.x)
- cocos2d-x-LuaProxy学习日志(1) -- Cocos2d-x HelloLua 介绍
- Lua语言学习之迭代器
- cocos2d-lua相关学习
- lua 中pairs 和 ipairs区别
- cocos2d-x3.0 lua学习(一)
- cocos2d lua 学习文档