2、lua语言、table数组、循环、
数组,这里属于从C++ 到lua 语言,此处不解释数据类型的含义。
在Lua 中,我们可以使用 table
( 表 ) 来实现数组的功能,
在 Lua 中, table 是一个一系列元素的集合,使用 大括号 进行表示,元素之间用逗号分隔.
t = {1,2,3,4,5}
-
TIP:这里数组 和C 语言 JAVA 的数组的下标不一样,Lua 中第一个元素的下标是1,第二个是2,以此类推。
-
例如:
t = {1,3,6,2,6} print(t[1]) -- 打印1 print(t[3]) -- 打印6 t[2] = 11 -- 更改数组第二个元素的值为11 print(t[2]) -- 打印11 t[6] = 66 -- 凭空创建第六个元素 并赋值为 66 print(t[6]) --打印66 print(t[20]) --打印 nil 因为不存在
-
注意一点:一般语言中数组在创建之后就不可变,而lua 中数组是可变长度的。
但是,目前我还不清楚 为什么lua 中数组是可变长度,底层原理难道和 C++ 中的
vector容器
是一样的吗?动态数组?
(不)简单的table
table 和传统的 数组不一样,这里的 table
中可以存放任意类型的数据,甚至数据的类型都可以混杂,甚至还可以存放 function
变量
但是访问方式依旧是 table
名字加下标。且能修改
-
Lua 的下标
在 Lua 中,下标可以自定义, 甚至可以让下标进行跳跃式,特别灵活。
t = {6,7,8,9} --上面和下面的代码等价 t = { [1] = 6, [2] = 7, [3] = 8, [4] = 9, } --甚至你可以跳过某些下标 t = { [1] = 6, [3] = 7, [5] = 8, [7] = 9, } print(t[7]) --输出9 --在声明后赋予元素值也是可以的 t = {}--空的table t[101] = 10 print(t[101]) --输出10
Lua 的下标不一定必须是数字,它也能是 string 类型。(特别灵活)
table
的元素有两种访问方式:1、如同数组那样使用t[]
进行访问。 2、使用table
名.
它的元素名
下标的小测验:
t = { { price = 7.52, weight = 2.1, }, { price = 8.31, weight = 1.4, year = '2018' }, year = '2019' } print( t["price"], t[1].price, t[2].weight, t["year"] )
-
全局变量与
table
,在Lua 中,所有的全局变量被存放在一个大table
中, 全局变量的table
名为_G
在Lua 中哪怕是在函数体或者循环体中定义的变量,只要没用
local
声明,则它定义的都是全局变量t = { [10] = 100, num = 12, abc = { [3] = "abcd" }, a = { b = { c = 789 } } } print("t[10]可获得number类型数据100:",t[10],type(t[10])) print("t.num可获得number类型数据12:",t.num,type(t.num)) print("t.abc[3]可获得string类型数据abcd:",t.abc[3],type(t.abc[3])) print("t.a.b.c可获得number类型数据789:",t.a.b.c,type(t.a.b.c))
-
table.concat( )
local a = {1, 3, 5, "hello" } print(table.concat(a)) print(table.concat(a, "|")) -->打印的结果: --135hello --1|3|5|hello
-
table 删减
循环
-
while循环
while 判断内容 do 循环体 end
local result = 0 local num = 1 while num <= 100 do result = result + num num = num + 1 end print(result)
-
for 循环
for 临时变量名=开始值,结束值,步长 do 循环的代码 end
其中,
步长
可以省略,默认为1临时变量名
可以直接在代码区域使用(但不可更改),每次循环会自动加步长值
,并且在到达结束值
后停止循环下面举一个例子,我们计算从1加到100的结果:
local result = 0 for i=1,100 do result = result + i end print(result)
-
break 可以退出循环,使用if 判断退出条件,
a = 10 init = 1 while i < a do print(init) init = init + 2 end for 1,a,2 do print(a) end
-