Table
可以通过整数、字符串以及其他类型的值 除了nil 来作为索引值。
table类似与c#中的list 可以动态地添加任意数量的元素到一个table中.
table 可以用来表示数组 符号表、集合、记录、队列等数据结构哦。也可以表示模块 包、对象
如io.read io为模块 read是函数。在lua中来看的话,read是作为io的key 来索引io的。io为table read是key。
---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by nuoyo.cn.
--- 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 示例:
list.x=1;---好像这样的话 x必须是字符串 这样x就是x字符
print("'----------'")
print(list["x"])
list.key="value"
print(list["key"])
输出结果:
输出结果:
'----------'
1
value
结论:
table.key
在lua中 table实际上就一个一个类对象,而紧跟成员操作符后面的key(必须是字符串)就可以理解为是一个成员。
在c#中成员包括:函数、字段、属性等
这样就很清楚了。
读取内容并存储到table中
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
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
2
1
2
1
2
1
3
2
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))---获取数组的最大索引 仅适用数值索引
输出结果:
2
1
2
1
2
1
3
2
3
6
通过使用table.maxn(list) 得到地址中最后的一个数值索引来解决有空隙的数组
方法:
通过for 从1-max 依次循环 判断是否是nil 如果是nil则继续下一个。
对于table我还是觉得容易出错,虽说动态性强,但是过于动态的东西,随着系统的深入,要是没有一定的规范,我想系统最后复杂了 很容易崩溃。