一、概述

表是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

最后修改日期: 2023年10月26日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。