Lua 使用table定义数组,定义Map;table的操作

(1)数组

table可以定义一维、二维、多维数组,

无需声明长度,可以随时增加元素,

lua语言从1开始索引,与一般语言从零开始不同

同一数组组中的元素可以是任意类型

cities = {'北京','上海','广州'}
cities[4] = 114514
for i = 1,4 do
	print('cities['..i..']='..cities[i])
end
-- 0作为索引不存在
print(cities[0])

结果

定义一个二维数组

--定义一个二维数组
arr = {}
for i = 1,3 do
	arr[i] = {}
	for j = 1,2 do
 		arr[i][j] = i * j
	end
end
--逐项输出
for i = 1,3 do
	for j = 1,2 do
		print(arr[i][j])
	end
end

结果

(2)Map

通过table定义 key-value键值对

通过下标方式操作

--定义一个map
emp = {name = "张山",age = 23, depart="销售部"}

-- 通过下标操作
emp["gender"] = "男"
print(emp["name"])
print(emp["gender"])

结果

通过点号方式操作

--定义一个map
emp = {name = "张山",age = 23, depart="销售部"}


-- 通过下标方式操作
--emp["gender"] = "男"
--print(emp["name"])
--print(emp["gender"])

-- 通过点号方式操作
emp.office = "2nd floor"
print(emp.age)
print(emp.office)

结果

定义一个map时,它的key可以是一个表达式的形式

---定义一个map,其key为表达式
a = 'xxx'
b = 3
c = 5

arr = {
	['emp_'..a] = true,
	[b + c] = 'hello',
	['hi'] = 123
}
print(arr.emp_xxx)
print(arr[8])
print(arr.hi)

结果

注意,不能写成

print(arr.8)

这种形式,会报错

(3)混合模式

Lua允许key-value 和 数组 混合使用,且key-value不占用数组的索引

--混合模式
emp = {'北京',name = '张三',age = 23,'上海',depart = '销售部','广州','深圳'}
print(emp[1])
print(emp[2])
print(emp[3])
print(emp[4])

结果

混合模式常见用法

--混合模式常见用法
emps = {
	{name = "张三",age =23},
	{name = "李四",age =24},
	{name = "王五",age =25},
	{name = "赵六",age =26},
}
for i = 1,4 do
	print(emps[i].name..':'..emps[i].age)
end

结果

(4)table的操作函数

Lua5.1的文档地址https://www.lua.org/manual/5.1/

下滑到index

table的操作函数

(a) table.concat (连接函数)

对数组的元素进行字符串拼接,

连接从start位置到end位置的所有元素

与key-value无关,仅仅连接数组元素

emp = {'北京',name = '张三',age = 23,'上海',depart = '销售部','广州','深圳'}
print("将所有数组元素拼接")
print(table.concat(emp))
print('#############################')
print('在元素中间加逗号')
print(table.concat(emp,','))
print('#############################')
print('从索引值为2的项开始拼接')
print(table.concat(emp,',',2))
print('#############################')
print('2开始,3结束')
print(table.concat(emp,',',2,3))

结果

table.concat不允许出现空

emp = {'北京',name = '张三',age = 23,'上海',depart = '销售部','广州',nil,'深圳'}
print(table.concat(emp))

报错

(b)table.insert (插入函数)

将数组元素插入的到指定位置,在没有传位置参数的情况下,默认为插入到末尾

cities = {'北京','上海','广州'}
--插入到指定位置
table.insert(cities,2,'深圳')
--插入到默认位置
table.insert(cities,'天津')

print(table.concat(cities,','))

结果

(c)table.maxn  (求最大索引)

这个函数用来求table的最大索引,也就是table中的数组长度

--最大索引值(长度)
emp = {}
print(table.maxn(emp))
emp = {6,9,9,8,7,10}
print(table.maxn(emp))
emp = {'北京',name = '张三',age = 23,'上海',depart = '销售部','广州','深圳'}
print(table.maxn(emp))

结果

(d)table.remove (移除项)

与插入类似,移除数组指定元素,默认移除末尾元素

cities = {'北京','深圳','上海','广州','天津'}
--删除指定位置元素
table.remove(cities,2)
--删除默认位置元素
table.remove(cities)

print(table.concat(cities,','))

运行结果

(e)table.sort        (排序)

该函数对指定的table中的数组元素进行升序排序

也可以通过传递函数的方式使其按规则排序

如果arr中既有字符串,又有字符型,那么对其排序就会报错

如果多个元素相同,则其相同的多个元素谁排在前面,谁在后面是不确定的

如果数组元素中包含nil,则排序就会报错

简单排序

cities = {'bj北京','sz深圳','sh上海','gz广州','tj天津'}
table.sort(cities)
print(table.concat(cities,','))

结果

降序排序

cities = {'bj北京','sz深圳','sh上海','gz广州','tj天津'}
--降序排序
table.sort(cities,	function(a,b)
						return a > b
					end
)
print(table.concat(cities,','))

结果

错误排序方式

--数组中有nil
cities = {'bj北京','sz深圳','sh上海','gz广州',nil,'tj天津'}
table.sort(cities)
--数组中有两种类型
cities = {'bj北京','sz深圳','sh上海','gz广州',114514,'tj天津'}
table.sort(cities)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值