Lua遍历table
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua遍历table相关的知识,希望对你有一定的参考价值。
参考技术A Lua中遍历table主要有四种方式,各有各的不同Lua的存储并不是顺序存储的,所以当我们使用第一种遍历方法去遍历的时候,输出的值可能和我们想象的顺序不同。
在我们的设想里,我们是希望它输出1,2,3,4,但是实际上输出的是1,2,4,3。for k,v in ipairs(tbtest) do是根据key中的hash值的排列顺序来排列的。
它的前提是key是从1开始的,那么它会按照key的大小顺序进行遍历,如果key不连续,它就不会接下去遍历
上面的函数只会打印1,2,3不会打印5
这样就一个都不会遍历
因为#table 是获取table里的数组段的长度,遍历时只会输出数组段的值,并且它的前提也是key必须从1开始,如果key不从1开始,#tbtest获取到的值就是0
它获取的是数组段的key的最大值,字符串的key是无法获取到的
其实maxn还是很有用处的,用它取到最大的key值,我们就可以从前往后遍历数据了,完全可以略过nil
while循环与其他语言循环几乎相同。
repeat..until在lua5.1之后和其他语言有一些细微的不同,就是在循环体的局部变量的作用域扩增到条件测试中,也就是until语句。
lua 4 使用table实现其他数据结构,并介绍遍历方法
本文会以vector / map / set 这三种数据类型的角度来梳理 table 支持的不同遍历方式。
table as array / vector
一般,C/C++中的 array / vector (下文简称 vector) 是没有 key。但是在 lua 中使用了 table 这种通用结构,就引入了 key 的问题。
在这里,把想用做 vector 的 table,做一个非常重要的约定:1 初始,key 连续。由于 table 的自由度很高,这个需要开发者自己约束。
---- 新建
t = {"A", "BB", "CCC"} -- 默认的key就是1初始且连续 -- 或者 t = {} -- 建立一个空的 t[1] = 1 t[2] = 2 t[3] = 3 -- 或者 t = { [1] = 1, [2] = 2, [3] = 3, -- 这里逗号可有可无 }
---- 赋值
---- 遍历
table as map / linked list
table as set
table as queues (队列,先进先出,不做介绍,请参考原文)
请参考:https://www.lua.org/pil/11.4.html
参考
http://blog.51cto.com/rangercyh/1032925
https://www.lua.org/pil/11.html
以上是关于Lua遍历table的主要内容,如果未能解决你的问题,请参考以下文章