我是靠谱客的博主 高高斑马,最近开发中收集的这篇文章主要介绍lua系统学习04-table表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 赵进凯.
--- 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

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

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

最后

以上就是高高斑马为你收集整理的lua系统学习04-table表Table的全部内容,希望文章能够帮你解决lua系统学习04-table表Table所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部