Lua 中 table(表) 的简单使用

Lua table(表)

table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数字、字典等。
Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。
Lua table 是不固定大小的,你可以根据自己需要进行扩容。


table(表)的构造

构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:

tab1= {} --空表

tab2 = {key1 = "value1",key2 = "value2"} --初始化

--访问形式
print(tab2.key1)
print(tab2["key1"])

--遍历
for k,v in pairs(tab2) do
	print(k..v)
end


tab3 = {"a","b","c","d"} --索引从1开始,依次递增的表

for key,value in pairs(tab3) do
	print(key..value)
end

--[[
输出:
value1
value1
key1value1
key2value2
1a
2b
3c
4d
--]]
-- 初始化表
mytable = {}

-- 指定值
mytable[1]= "Lua"

-- 移除引用
mytable = nil
-- lua 垃圾回收会释放内存

表的中元素的连接,插入和移除,,,

--表的方法 table.xxxmethod

-- 拼接成字符串
print(table.concat(mytable))          -- 无缝连接
print(table.concat(mytable,","))	  -- 带逗号的连接
print(table.concat(mytable,",",2,4))  -- 带逗号连接第二个到第四个元素

-- 添加数据
mytable[6] = 'java'                   --需要知道索引
mytable[#mytable+1] = "php"			  --取得表的长度+1
table.insert(mytable,"c")             --使用内置的方法添加
--插入到2的位置 后面的后移
table.insert(mytable,2,"sql")

--移除指定位置元素,不写则移除最后一个
table.remove(mytable,2)

--移除2位置的元素,致为空,,此时后面的元素不会发生移动
mytable[2] = nil

--查看结果
for v,k in pairs(mytable) do
	print(v,k)
end

--[[ 输出是:
luaC#jsbooc++
lua,C#,js,boo,c++
C#,js,boo
1	lua
3	js
4	boo
5	c++
6	java
7	php
8	c
--]]

**表的排序:**除了对数字对字母也可以排序,根据字符的ACIll码进行排序:
示例:

mytable = {'lua','C#','js','boo','c++'}

print('排序前')
for v,k in pairs(mytable) do
	print(v,k)
end

table.sort(mytable)
print('排序后')
for v,k in pairs(mytable) do
	print(v,k)
end

--[[   输出是:
排序前
1	lua
2	C#
3	js
4	boo
5	c++
排序后
1	C#
2	boo
3	c++
4	js
5	lua
--]]

注意:当我们获取的table的长度的时候无论是使用#还是table.getn其都会在索引中断(索引不是连续数字)的地方停止技术,而导致无法正确获得table 的长度,推荐使用迭代器的形式遍历数组

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陈言必行

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

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

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

打赏作者

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

抵扣说明:

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

余额充值