美文网首页
Lua遍历table

Lua遍历table

作者: 凉拌姨妈好吃 | 来源:发表于2018-06-26 15:30 被阅读0次

Lua中遍历table主要有四种方式,各有各的不同

for key,value in pairs(tbtest) do
  XXX
end

for key,value in ipairs(tbtest) do
  XXX
end

for i=1,#(tbtest) do
  XXX
end

for I=1 ,table.maxn(tbtest) do
  XXX
end
1. for key,value in pairs(tbtest)

Lua的存储并不是顺序存储的,所以当我们使用第一种遍历方法去遍历的时候,输出的值可能和我们想象的顺序不同。

tbtest = {
  [1] = 1,
  [2] = 2,
  [3] = 3,
  [4] = 4,
}

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

在我们的设想里,我们是希望它输出1,2,3,4,但是实际上输出的是1,2,4,3。for k,v in ipairs(tbtest) do是根据key中的hash值的排列顺序来排列的。

2. for key,value in ipairs(tbtest)

它的前提是key是从1开始的,那么它会按照key的大小顺序进行遍历,如果key不连续,它就不会接下去遍历

tbtest = {  
    [1] = 1,  
    [2] = 2,  
    [3] = 3,  
    [5] = 5,  
} 
 
for k,v in ipairs(tbtest) do  
    print(v)  
end 

上面的函数只会打印1,2,3不会打印5

local tbtest = {  
    [2] = 2,  
    [3] = 3,  
    [5] = 5,  
} 
 
for k,v in ipairs(tbtest) do  
    print(v)  
end 

这样就一个都不会遍历

3. for i=1,#(tbtest) do

因为#table 是获取table里的数组段的长度,遍历时只会输出数组段的值,并且它的前提也是key必须从1开始,如果key不从1开始,#tbtest获取到的值就是0

tbtest = {  
    [1] = 1,  
    [2] = 2,  
    [6] = 6,  
}  
print(#(tbtest))  //输出2


tbtest = {  
    ["a"] = 1,  
    [2] = 2,  
    [3] = 3,  
} 
 
print(#(tbtest)) //输出0

4. for I=1 ,table.maxn(tbtest) do

它获取的是数组段的key的最大值,字符串的key是无法获取到的

tbtest = {  
    [1] = 1,  
    [2] = 2,  
    [3] = 3,  
}  
print(table.maxn(tbtest))  //输出3
 
 
tbtest = {  
    [6] = 6,  
    [1] = 1,  
    [2] = 2,  
}  
print(table.maxn(tbtest)) //输出6

tbtest = {  
    ["a"] = 1,  
    [2] = 2,  
    [3] = 3,  
}  
print(table.maxn(tbtest)) //输出3

其实maxn还是很有用处的,用它取到最大的key值,我们就可以从前往后遍历数据了,完全可以略过nil

5. while/repeat..until

while循环与其他语言循环几乎相同。

repeat..until在lua5.1之后和其他语言有一些细微的不同,就是在循环体的局部变量的作用域扩增到条件测试中,也就是until语句。


repeat..until

相关文章

  • Lua遍历table

    Lua中遍历table主要有四种方式,各有各的不同 1. for key,value in pairs(tbtes...

  • 游戏工程师面试要点整理

    浅析Lua中table的遍历和删除 stl:vector stl:map 插入排序 希尔排序 快速排序 c/c++...

  • lua中遍历table的几种方式比较

    转自转载 当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一...

  • lua中遍历table的几种方式比较

    当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形...

  • lua部分使用问题及格式化

    1,table index is nil lua 表明table的下标是nil,有问题,需更改下标 2,lua格式...

  • LuaC API

    Lua C APi 总结 Lua_newtable(L) 创建table并放到栈顶 lua_pushstring(...

  • [LuaArray] 严格的 Lua 数组实现

    说点什么 由于 Lua table 的特殊构造,使用纯 Lua 实现 纯数组 是很困难的—— table 是 Ar...

  • Lua 语法入门

    赋值 lua 赋值支持多个值同时赋值 table lua table 的 key 可以是数字也可以是字符串,并且 ...

  • lua和c的初始

    lua和c的交互包括:c访问lua的变量、c访问lua的table、c调用lua的方法、lua调用c的函数 参考链...

  • lua table

    table.concat(table, sep, start, end) concat是concatenate(连...

网友评论

      本文标题:Lua遍历table

      本文链接:https://www.haomeiwen.com/subject/yozpyftx.html