lua顺序遍历table

lua有多种遍历table的方法,比如ipairs,pairs,拿到table的长度#table等等。这几种遍历的方式遇到不同的情况遍历出来的结果也不一样,具体是怎么回事呢,下面就将所有的情况都分析一遍。

首先就是遍历的元素不是K,V的形式,在lua中如果被遍历的元素不是键值对的形式,那么lua会顺序遍历元素。看几个示例一目了然。

1. table中都是一个个的单元素


--table中都是一个个的单元素
table_view = {  
     "w",  
     "e",  
     "r",  
     1,
     2,
     3,
 } 
for i, v in ipairs(table_view) do  
     print(v)
end

运行结果:

会发现,是按顺序遍历的。

2. table中的元素还是table的情况

--table中的元素还是table
local cfg2 = {
     {ss = "a"},
     {ss = "b"},
     {ss = "c"},
     {ss = "d"},
     {ss = "e"},
}
for k,v in pairs(cfg2) do
     if v then
          print(v.ss)
     end
end

运行结果:
在这里插入图片描述
结果依然是顺序打印。

3. table中的元素是键值对的情况

--table中的元素是键值对的情况
local cfg = {a="a",b="b",c="c",d="d",e="e"}
for k,v in pairs(cfg) do
     print("k:"..k.."----".."v:"..v)
end

运行结果:
在这里插入图片描述
会发现不是顺序遍历了。

当table中的元素有多种类型的情况

table_view = {  
     "w",  
     "e",  
     "r",  
     color1 = "red",  
     color2 = "blue", 
     color3 = "yellow",
     color4 = "pink",
     {"a1", "a2", "a3"},  
     {"b1", "b2", "b3"},  
     {"c1", "c2", "c3"},  
 } 
 for i, v in pairs(table_view) do  
     if type(v) == "table" then  
         for new_table_index, new_table_value in pairs(v) do  
             print(new_table_value)  
         end  
     else  
         print(v)  
     end  
 end 

运行结果:

在这里插入图片描述
结果显示:如果元素不为键值对,则按顺序遍历元素,将其他元素遍历完毕之后再随机遍历键值对元素。

疑问:
为什么元素分键值对和非键值对?

其实lua在遍历的时候都是按照键值对来遍历的,即K-V的形式,上述案例中的单元素 “w” , “e” , “r” 其实是元素的值,当没有主动声明 "Key"时,lua会给这些单元素添加默认值。我们可以打印这些单元素的 “key”。

table_view = {  
     "w",  
     "e",  
     "r",  
     1,
     2,
     3,
 } 
for i, v in ipairs(table_view) do  
     print(i.."---"..v)
end

运行结果:
在这里插入图片描述
结果证明了上面的观点。而且发现 “key” 的默认值不是随便给的,而是从1开始赋值。
这里要补充lua的一个知识点-----lua想要顺序遍历table中的每个元素有一个前提条件,即元素的 “key” 是从“1”开始,第几个元素"key"就是几。比如第三个元素“r” 的 “key”就是“3”。这样就解释了lua在遍历单元素的时候为什么会是顺序遍历。

比如这样:

table_view = {  
     [1]="w",  
     [2]="e",  
     [3]="r",  
     [4]=1,
     [5]=2,
 } 
for i, v in ipairs(table_view) do  
     print(i.."---"..v)
end

结果键值对的也是顺序遍历
在这里插入图片描述
总结:想要顺序遍历table中的元素,如果元素中有K,V那么需要观察K是不是满足从“1”开始,第几个元素"key"就是几的条件,否则元素不会顺序遍历。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值