lua系统学习04-table表

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

 

 

给TA打赏
共{{data.count}}人
人已打赏
开发数据库电脑运维

Steam盗号指南 — 洗余额 游戏2048_st 被盗 交易

2023-9-15 8:20:14

开发

Python字典数据合并及规则排序实现

2023-9-15 8:39:16

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索