lua ipairs(t) and pairs(t)
lua ipairs(t) and pairs(t)
andrew810810 发表于11个月前
lua ipairs(t) and pairs(t)
  • 发表于 11个月前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

ipairs(t) and pairs(t)

reference:

http://www.lua.org/manual/5.3/manual.html

ipairs (t)

Returns three values (an iterator function, the table t, and 0) so that the construction

for i,v in ipairs(t) do body end

will iterate over the key–value pairs (1,t[1]), (2,t[2]), ..., up to the first nil value.

 

 

pairs (t)

If t has a metamethod __pairs, calls it with t as argument and returns the first three results from the call.

Otherwise, returns three values: the next function, the table t, and nil, so that the construction

for k,v in pairs(t) do body end

will iterate over all key–value pairs of table t.

See function next for the caveats of modifying the table during its traversal.

 

示例1:

local tabFiles = {   
[2] = "test2",  
[4] = "test3",  
[3] = "test1"  
}  
   
for k, v in ipairs(tabFiles) do  
print(k, v)  
end

运行结果:

当 Lua 调用 ipairs(a)开始循环时,他获取三个值:迭代函数 iter,状态常量 a 和控制变量初现的原始方法:始值 0;然后 Lua 调用 iter(a,0)返回 1,a[1](除非 a[1]=nil);第二次迭代调用 iter(a,1)返回 2,a[2]……直到第一个非 nil 元素。

所以在 ipairs(tabFiles) 遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。

示例2:

local tabFiles = {
[2] = "test2",
[4] = "test3",
[3] = "test1"
}

for k, v in pairs(tabFiles) do
print(k, v)
end

运行结果:

3	test1
2	test2
4	test3

疑问:

示例2输出顺序为什么是这样的?

示例3:

local tabFiles1 = {   
[3] = "test2",  
[6] = "test3",  
[4] = "test1"  
}  
   

for k, v in pairs(tabFiles1) do  
print(k, v)  
end

运行结果:

3	test2
6	test3
4	test1

 

示例4:

local tabFiles2 = {   
[1] = "test2",  
[6] = "test3",  
[4] = "test1"  
}
for k, v in ipairs(tabFiles2) do  
print(k, v)  
end

运行结果:

1	test2

当key=2时候value就是nil,所以直接跳出循环不输出任何值。

示例5:

local tabFiles2 = {   
[1] = "test2",  
[6] = "test3",  
[4] = "test1"  
}
for k, v in pairs(tabFiles2) do  
print(k, v)  
end

运行结果:

1	test2
6	test3
4	test1

 

示例6:

local tabFiles3 = {   
[2] = "test2",  
[6] = "test3",  
[1] = "test1",
"ok",
}  
for k, v in ipairs(tabFiles3) do
print(k, v)
end

运行结果:

1	ok
2	test2

 

示例7:

local tabFiles3 = {   
[2] = "test2",  
[6] = "test3",  
[1] = "test1",
"ok",
}  
for k, v in pairs(tabFiles3) do
print(k, v)
end
1	ok
2	test2
6	test3

注释:

table中定义了key为1的value,以及没有定义key的value,发现对于key为1的value会被没有定义key的value覆盖。

标签: Lua
共有 人打赏支持
粉丝 3
博文 127
码字总数 117648
×
andrew810810
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: