1、前言
table作为lua中的一种数据结构,在使用上有时可以看作为数据或者字典。
2、表的建立
(1)空表建立
a = {}
print(type(a))
(2)指定值建立
a ={name="esk"}
a["age"]=18
print(a["name"]..":"..a["age"])
指定值建立表可通过{ }方式,或者[ ]。
注:在使用{ }方式时,name作为key时无需添加“ ”,在通过[ ]访问对应value时需以字符串形式作为key
(3)使用循环建立
--初始化空表
a={}
--通过循环赋值
for i = 1 ,10 do
a[i]=i
end
for k,v in pairs(a) do
print(k..":"..v)
end
3、表的插入、更新和删除
(1)插入元素
student = {"hong","ming","tom"}
print("当前学生为")
for k,v in pairs(student) do
print(v)
end
table.insert(student,"marry") --末尾插入
table.insert(student,3,"liu") --在索引为3的地方插入
print("插入后")
for k,v in pairs(student) do
print(v)
end
(2)更新元素
student = {"hong","ming","tom"}
student[3] ="feng"
print(student[3])
此处使用索引3进行更新是因为,在表初始化时1对应hong,2对应ming,3对应tom,此处的3为key,tom为value
(3)删除元素
student = {"hong","ming","tom","esk"}
table.remove(student) --默认删除随后一个
table.remove(student,2)--删除索引为2
for k,v in pairs(student) do
print(v)
end
(4)删除表
a = {key = 6}
print("初始状态"..type(a))
a = nil
print("删除后"..type(a))
a在lua中实则为一个指针,将其置空后,lua的垃圾回收机制将会回收对应的内存空间
4、表的内置函数
(1)table.concat(表,连接符,起始,结束)
student = {"hong","ming","tom","esk"}
print(table.concat(student," "))
(2)table.foreach(表,函数)
--示例1
student = {"hong","ming","tom","esk"}
function test(key,value)
print(key..":"..value)
end
table.foreach(student,test)
--示例2
student = {"hong","ming","tom","esk"}
table.foreach( student, function( key, value )
print( key ..":".. value )
end )
(3)table.sort(表)
student = {"hong","ming","tom","esk"}
table.sort(student)
for i,v in pairs(student) do
print(v)
end
5、表的判空
student = {}
if next(student) == nil then
print("table is nil")
else
print("table is not nil")
end
使用next函数遍历表,可使用该方法判断表是否为空。
使用以下方法都为错误
if student == nil --student仅为一个指针,该方法仅能判断student指向的地址是否为空
if student == {} --student与表的地址进行比较
if #student == 0 --使用#获取长度条件为student不为nil