我是靠谱客的博主 高高斑马,这篇文章主要介绍lua系统学习04-table表Table,现在分享给大家,希望可以做个参考。

Table

可以通过整数、字符串以及其他类型的值 除了nil 来作为索引值。
table类似与c#中的list 可以动态地添加任意数量的元素到一个table中.
table 可以用来表示数组 符号表、集合、记录、队列等数据结构哦。也可以表示模块 包、对象
如io.read io为模块 read是函数。在lua中来看的话,read是作为io的key 来索引io的。io为table read是key。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
--- --- Generated by EmmyLua(https://github.com/EmmyLua) --- Created by 赵进凯. --- DateTime: 2021/11/10 22:12 --- --- function func() return "FUNC" end list={"a",1,nil,1.2,func()} for i = 1,5 do print(list[i]) end ---经过测试 table数字索引默认是从1开始的,跟py一样 ---py可以指定table的数字索引,同理table应该一样, list[10]="10" list[11]="11" for i = 1,11 do print(list[i]) end ---经过测试 当遍历不存在的key 并不会抛出异常直接放回nil 这就很爽。

当一个程序再也没有对一个table的引用时,lua的垃圾收集器最终会删除该table。
类似c#
关于table中的删除元素——将nil赋予table就可以删除该元素。与全局变量一样。
因为lua正是将全局变量存储在一个普通的table中,可以把table看作一个对象,其下的元素都是他的全局变量。
除了使用table[key]来索引数据,还可以使用table.key 示例:

复制代码
1
2
3
4
5
6
list.x=1;---好像这样的话 x必须是字符串 这样x就是x字符 print("'----------'") print(list["x"]) list.key="value" print(list["key"])
复制代码
1
2
3
4
5
输出结果: '----------' 1 value

结论:
table.key
在lua中 table实际上就一个一个类对象,而紧跟成员操作符后面的key(必须是字符串)就可以理解为是一个成员。
在c#中成员包括:函数、字段、属性等
这样就很清楚了。

读取内容并存储到table中

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
function tableTest02(list) for i = 1, 10 do print("请输入第"..i.."字符") list[i]=io.read() print(list[i]) end end tableTest02(list); for i = 1, 10 do print(list[i]) end

与c c++主流语言不一样的是,在lua中数组是以1作为索引的起始值。
#是长度操作符,不仅可以获得字符串的长度,也可以获取到table的最后一个索引。但是必须是一个数值索引连续的table,意思是要 1 2 3 …
中间不能中断。lua从1开始遍历 直到遇到nil(nil在table中作为数组结尾的标志)他就立刻返回前一个索引。无论后面还有多少值,直接把前一个当作最后的索引,不再继续遍历下去了 所以说使用table 还需要自己注意一些规范,这样可以带来便捷。
看示例:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function tableTest03() list={1,2} print(list[#list]) print(list[#list-1]) list[6]=3 print(list[#list]) print(list[#list-1]) list[5]=3 print(list[#list]) print(list[#list-1]) list[3]=3 print(list[#list]) print(list[#list-1]) end

输出结果:

复制代码
1
2
3
4
5
6
7
8
9
2 1 2 1 2 1 3 2
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
list={1,2} print(list[#list]) print(list[#list-1]) list[6]=3 print(list[#list]) print(list[#list-1]) list[5]=3 print(list[#list]) print(list[#list-1]) list[3]=3 print(list[#list]) print(list[#list-1]) list["x"]="x" list["y"]="x" print(table.getn(list))---这个也是获取长度 print(table.maxn(list))---获取数组的最大索引 仅适用数值索引
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
输出结果: 2 1 2 1 2 1 3 2 3 6
复制代码
1
2
3
4
通过使用table.maxn(list) 得到地址中最后的一个数值索引来解决有空隙的数组 方法: 通过for 从1-max 依次循环 判断是否是nil 如果是nil则继续下一个。

对于table我还是觉得容易出错,虽说动态性强,但是过于动态的东西,随着系统的深入,要是没有一定的规范,我想系统最后复杂了 很容易崩溃。

最后

以上就是高高斑马最近收集整理的关于lua系统学习04-table表Table的全部内容,更多相关lua系统学习04-table表Table内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部