一、概述
表是Lua中唯一的数据结构。
二、表的操作
1、创建表
--创建一个空表
table_name = {}
--创建一个类似数组的表,索引从1开始,下面两种写法等价
table_name = {value1,value2}
table_name = {
[1] = value1,
[2] = value2
}
--创建一个类似于字典的表,下两种写法等价
table_name = {key1 = value1 ,key2 = value2}
table_name = {
["key1"] = value1,
["key2"] = value2
}
2、表的索引
table["key"] = 10
table.key = 20;
上述两种使用方法完全相同
3、表作为数组的操作
关于表作为数组要求表不存在空洞,即每一个索引位置都不为nil
--创建数组
array = {}
--数组中增加数据
array[1] = value1
array[2] = value2
array[3] = value3
--获取数组的长度
len = #array
--获取表的最后一个元素
array[#array]
--增加一个元素
array[#array+1] = newvalue
--删除最后一个元素
array[#array] = nil
4、遍历表
随机顺序遍历表
value1 = 1
value2 = 2
table_name = {
["key1"] = value1,
["key2"] = value2
}
for key, value in pairs(table_name) do
print(key .. ":" .. value)
end
顺序遍历表,仅限于数组类型的
value1 = 1
value2 = 2
table_name = {
[1] = value1,
[2] = value2
}
for key, value in ipairs(table_name) do
print(key .. ":" .. value)
end
另一种遍历方法
value1 = 1
value2 = 2
table_name = {
[1] = value1,
[2] = value2
}
for i = 1, #table_name do
print(i .. ":" .. table_name[i])
end
四、表中的函数
--方式1
Lib = {}
Lib.func1 = function() end
Lib.func2 = function() end
--方式2
Lib = {
func1 = function() end,
func2 = function() end
}
--方式3
Lib = {}
function Lib.func1() end
function Lib.func2() end
三、表的标准库
1、插入数据
- table.insert(table_name, 12):将12插入的表的末尾
- table.insert(table_name, 1, 56):将56插入到表的1序号位
2、删除元素
- value = table.remove(table_name):删除表的最后一个数据并返回
- value = table.remove(table_name, 1):删除表的1位数据并返回
3、表格排序
a = { 1, 3, 4, 1, 3, 6, 199, 12, 22 }
table.sort(a)
for index, value in ipairs(a) do
print(value)
end
对于无法排序的数据进行自定义比较器
根据num进行生序排列
children = {
{ id = "1", name = "zc", num = 70 },
{ id = "2", name = "ls", num = 20 },
{ id = "3", name = "ww", num = 100 },
{ id = "4", name = "zl", num = 80 },
}
table.sort(children, function(a, b)
return a.num < b.num
end)
for index, value in ipairs(children) do
print("id:" .. value.id .. ",name:" .. value.name .. ",num:" .. value.num)
end
留言