Lua语法介绍(7)_table

table
认识数组
数组,使用一个变量名,存储一系列的值
很多语言中都有数组这个概念,在Lua中,我们可以使用table(表)来实现这个功能
在Lua中,table是一个一系列元素的集合,使用大括号进行表示,其中的元素之间以逗号分隔,类似下面的代码:
零基础语法教程传输门:
t = {1,3,8,5,4}
我们可以直接使用元素的下标,来访问、或者对该元素进行赋值操作。
在上面的table变量t中,第一个元素的下标是1,第二个是2,以此类推。
我们可以用变量名+中括号,中括号里加上下标,来访问或更改这个元素,如下面的例子:
t = {1,3,8,5,4}
print(t[1]) --打印1
print(t[3]) --打印8

t[2] = 99 --更改第二个元素的值
print(t[2]) --打印99

t[6] = 2 --凭空新建第六个元素并赋值
print(t[6]) --打印2

print(t[10])
–因为不存在,打印nil
以上就是table最简单的一个例子了,就是当作数组来用(注
意,一般语言中的数组基本都为不可变长度,这里的table为可变长度)
下面你需要完成:
新建一个table,名为cards,存入1-10十个数字
将第3个元素与第7个元素交换
将第9个元素与第2个元素交换
增加第11个变量,值为23
–请补全代码
cards =
简单table
上一节里,我们将table来表示数组,实际上,table中可以包括任意类型的数据
比如我们可以在table中放置number和string数据,类似下面的代码:
t = {“abc”,223,“,…a”,123123}
我们甚至能在里面放function变量
t = {
function() return 123 end,
function() print(“abc”) end,
function(a,b) return a+b end,
function() print(“hello world”) end,
}
t1
t2
t3
t4
这些table访问每个元素的方式仍然是直接用下标,并且也能用下标来进行修改
下面你需要完成:

新建一个table,名为funcList,并实现以下功能
调用funcList1,返回a和b的乘积
调用funcList2,返回a减b的差
调用funcList3,返回a的相反数(-a)
–请补全代码
funcList = {

}

a,b = 1,2–提供两个数
print(“a,b值为”,a,b)
print(“a和b的乘积:”,funcList1)
print(“a和b的差:”,funcList2)
print(“a和相反数:”,funcList3)
table下标
在前两节,我们的table都只是一些简单的List(列表),每个元素的下标都是自动从1排列的
实际上,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
下面你需要:

新建一个变量t,并按下面的格式声明
下标为1的元素,值为123(number)
下标为13的元素,值为"abc"(string)
下标为666的元素,值为"666"(string)
–请补全代码
t = {

}

print(“下标为1的元素:”,t[1],type(t[1]))
print(“下标为13的元素:”,t[13],type(t[13]))
print(“下标为666的元素:”,t[666],type(t[666]))
下标进阶
在上一节,我们学习了如何自定义下标,其实在Lua中,下标也可以是字符串,如下面的例子

t = {
[“apple”] = 10,
banana = 12,
pear = 6,
}
–使用[“下标”] = 值
–和 下标 = 值
–都是正确写法
–当第二种方式有歧义时,应该用第一种方式

–可以用下面两种方式访问:
print(t[“apple”])
–输出10
print(t.apple)
–输出10
–当第二种方式有歧义时,应该用第一种方式
可见,在使用string作为下标时,table的灵活性提升了一共数量级。
string作为下标时,也可以动态赋值:

t = {} – 空table
t[“new”] = “新的值”
print(t.new)
–输出 新的值
下面你需要完成:

新建table变量t
下标为apple的元素,值为123(number)
下标为banana的元素,值为"abc"(string)
下标为1@1的元素,值为"666"(string)
–请补全代码
t = {

}

print(“下标为apple的元素:”,t[“apple”],type(t[“apple”]))
print(“下标为banana的元素:”,t[“banana”],type(t[“banana”]))
print(“下标为1@1的元素:”,t[“1@1”],type(t[“1@1”]))
table小测验
下面的代码,将会打印什么?
t = {
apple = {
price = 7.52,
weight = 2.1,
},
banana = {
price = 8.31,
weight = 1.4,
year = ‘2018’
},
year = ‘2019’
}
print(
t.price,
t.apple.price,
t.banana.weight,
t.year
)
table小测验2
下面的代码,将会打印什么?
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”]
)
Lua全局变量与table
在前面我们知道了,在table中,可以直接用table名[下标]或table名.string下标来访问元素
实际上,在Lua中,所有的全局变量全部被存放在了一共大table中,这个table名为:_G
我们可以用下面的例子来示范:
n = 123–新建变量
print(n)–输出123
print(_G.n)–输出123

_G.abc = 1–相当于新建全局变量
print(abc)–输出1

_G[“def”] = 23–相当于新建全局变量
print(def)–输出23

–甚至你可以像下面这样
_G.print(“hello”)
_G"print"
现在,你明白为什么说万物基于table了吧?
你需要完成下面的任务:

已知有一个全局变量,名为@#$
请新建一个变量result
将@#KaTeX parse error: Expected 'EOF', got '#' at position 21: …赋值给result _G["@#̲"] = 123

result = --请补全代码
print(“result值为”,result)
table小测试3
请新建一个名为t的table,满足以下要求
t[10]可获得number类型数据100
t.num可获得number类型数据12
t.abc[3]可获得string类型数据abcd
t.a.b.c可获得number类型数据789
–请补全代码
t = {

}

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
table.concat (table [, sep [, i [, j ] ] ])
将元素是string或者number类型的table,每个元素连接起来变成字符串并返回。
可选参数sep,表示连接间隔符,默认为空。
i和j表示元素起始和结束的下标。
下面是例子:
local a = {1, 3, 5, “hello” }
print(table.concat(a))
print(table.concat(a, “|”))

–>打印的结果:
–135hello
–1|3|5|hello
请完成下面的任务:

已知table变量t,
将t中的结果全部连起来
间隔符使用,
并使用print打印出来
t = {“a”,“b”,“c”,“d”}
print(“连接结果:”)
–补全代码
table删减
table.insert (table, [pos ,] value)
在(数组型)表 table 的 pos 索引位置插入 value,其它元素向后移动到空的地方。pos 的默认值是表的长度加一,即默认是插在表的最后。
table.remove (table [, pos])
在表 table 中删除索引为 pos(pos 只能是 number 型)的元素,并返回这个被删除的元素,它后面所有元素的索引值都会减一。pos 的默认值是表的长度,即默认是删除表的最后一个元素。
下面是例子:

local a = {1, 8} --a[1] = 1,a[2] = 8
table.insert(a, 1, 3) --在表索引为1处插入3
print(a[1], a[2], a[3])
table.insert(a, 10) --在表的最后插入10
print(a[1], a[2], a[3], a[4])

–>打印的结果:
–3 1 8
–3 1 8 10

local a = { 1, 2, 3, 4}
print(table.remove(a, 1)) --删除速索引为1的元素
print(a[1], a[2], a[3], a[4])

print(table.remove(a)) --删除最后一个元素
print(a[1], a[2], a[3], a[4])

–>打印的结果:
–1
–2 3 4 nil
–4
–2 3 nil nil
请完成下面的任务:

已知table变量t,
去除t中的第一个元素
然后这时,在t的第三个元素前,加上一个number变量,值为810
t = {1,2,3,4,5,6,7,8,9}

–补全代码

print(“第一个元素应为2:”,t[1])
print(“第三个元素应为810:”,t[3])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l531798151

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值