Lua教程(七):数据结构详解
Lua 中的数据结构广泛应用于各种计算机程序中。本文将详细介绍 Lua 中的数组、列表、栈、队列、集合和字典等数据结构的使用以及相关的函数。
数组
数组是存储在连续内存位置上的相同数据类型的元素集合。Lua 中的数组索引默认从 1 开始。下面是一些常用的 Lua 数组函数:
table.concat(arr[, sep[, i[, j]]])
将一个数组 arr 中的所有元素连接成一个字符串,并可选择在它们之间插入一个给定的分割字符串 sep。从索引 i 开始到 j 结束的数组元素将被连接。默认分隔符为 ""(空字符串)。如下示例:
local arr = {"Lua", "Tutorial", "For", "Beginners"}
print(table.concat(arr))
-- 输出: LuaTutorialForBeginners
print(table.concat(arr, ", "))
-- 输出: Lua, Tutorial, For, Beginners
print(table.concat(arr, ", ", 2, 3))
-- 输出: Tutorial, For
table.insert(table, pos, value)
在 table 的 pos 位置插入 value。pos 和 value 参数都是可选的。如果 pos 参数省略,则默认将 value 插入到 table 的末尾。如下示例:
local sites = {"Runoob", "Google", "Taobao"}
table.insert(sites, "Android")
print(table.concat(sites, ", "))
-- 输出: Runoob, Google, Taobao, Android
table.insert(sites, 1, "Lua")
print(table.concat(sites, ", "))
-- 输出: Lua, Runoob, Google, Taobao, Android
table.remove(tab, pos)
从 table 中删除 pos 位置的元素,并返回被删除的元素。pos 是可选参数,默认为 table 的长度,如果 pos 指定为负数,则从表尾倒计数。如下示例:
local sites = {"Runoob", "Google", "Taobao", "Android"}
print(table.remove(sites))
-- 输出: Android
print(table.concat(sites, ", "))
-- 输出: Runoob, Google, Taobao
print(table.remove(sites, 2))
-- 输出: Google
print(table.concat(sites, ", "))
-- 输出: Runoob, Taobao
列表
列表是一系列元素的有序集合,Lua 中可以用 table 来实现列表。Lua 中的 table 可以用作数组也可以用作列表。下面是一些常用的 Lua 列表函数:
table.insert(table, pos, value)
在 table 的 pos 位置插入 value,pos 和 value 参数都是可选的。如果 pos 参数省略,则默认将 value 插入到 table 的末尾。如下示例:
local list = {"Lua", "Tutorial"}
table.insert(list, 1, "Beginners")
table.insert(list, "For")
print(table.concat(list, " "))
-- 输出: Beginners Lua Tutorial For
table.remove(tab, pos)
从 table 中删除位置为 pos 的元素,并返回这个元素。pos 是可选参数,默认为 table 的长度,如果 pos 指定为负数,则从表尾倒计数。如下示例:
local list = {"Lua", "Tutorial", "For", "Beginners"}
table.remove(list, 2)
print(table.concat(list, " "))
-- 输出: Lua For Beginners
table.remove(list)
print(table.concat(list, " "))
-- 输出: Lua For
栈
栈是一种遵循 LIFO(Last In First Out)原则的数据结构。Lua 中没有预定义的栈,但可以使用 table 实现栈的所有操作。下面是一些常用的 Lua 栈函数:
table.insert(table, value)
在 table 的末尾插入元素,模拟入栈操作。如下示例:
local stack = {} -- 创建一个空栈
table.insert(stack, 1)
table.insert(stack, 35)
table.insert(stack, 28)
print(table.concat(stack, " "))
-- 输出: 1 35 28
table.remove(table)
删除 table 的最后一个元素,模拟出栈操作。如下示例:
local stack = {1, 35, 28}
table.remove(stack)
print(table.concat(stack, " "))
-- 输出: 1 35
队列
队列是一种遵循 FIFO(First In First Out)原则的数据结构。Lua 中没有预定义的队列,但可以使用 table 实现队列的所有操作。下面是一些常用的 Lua 队列函数:
table.insert(table, pos, value)
在 table 的 pos 位置插入 value,pos 和 value 参数都是可选的。如果 pos 参数省略,则默认将 value 插入到 table 的末尾,模拟入队操作。如下示例:
local queue = {} -- 创建一个空队列
table.insert(queue, 1)
table.insert(queue, 2)
table.insert(queue, 3)
print(table.concat(queue, " "))
-- 输出: 1 2 3
table.remove(table)
删除 table 的第一个元素,模拟出队操作。如下示例:
local queue = {1, 2, 3}
table.remove(queue, 1)
print(table.concat(queue, " "))
-- 输出: 2 3
集合
集合是一种无序且唯一的元素集合。Lua 中没有预定义的集合,但可以用 table 来实现。下面是一些常用的 Lua 集合函数:
table.concat(arr[, sep[, i[, j]]])
将数组 arr 中的所有元素连接成一个字符串,并可选择在它们之间插入一个给定的分隔字符串 sep。从索引 i 开始到 j 结束的数组元素将被连接。默认分隔符为 ""(空字符串),用于将集合中的元素转换成字符串。如下示例:
local set = {2, 4, 6, 8, 10}
print(table.concat(set, ", "))
-- 输出: 2, 4, 6, 8, 10
table.insert(table, pos, value)
在 table 的 pos 位置插入 value,模拟集合中添加元素的操作。如果 pos 参数省略,则默认将 value 插入到 table 的末尾。如下示例:
local set = {2, 4, 6, 8, 10}
table.insert(set, 3, 5)
table.insert(set, 6)
print(table.concat(set, ", "))
-- 输出: 2, 4, 5, 6, 8, 10, 6
table.remove(tab, pos)
从 table 中删除 pos 位置的元素,并返回被删除的元素,模拟集合中删除元素的操作。pos 是可选参数,默认为 table 的长度,如果 pos 指定为负数,则从表尾倒计数。如下示例:
local set = {2, 4, 5, 6, 8, 10, 6}
table.remove(set, 7) -- 删除第7个元素6
table.remove(set, 3) -- 删除第3个元素5
print(table.concat(set, ", "))
-- 输出: 2, 4, 6, 8, 10
字典
字典是一种使用键值对存储数据的数据结构。在 Lua 中,字典通常使用 table 来表示。下面是一些常用的 Lua 字典函数:
table.insert(table, pos, value)
在 table 的 pos 位置插入 value,模拟字典中添加键值对的操作。如果 pos 参数省略,则默认将 value 插入到 table 的末尾。如下示例:
local dict = {}
dict["name"] = "John Doe"
dict["age"] = 24
dict["sex"] = "M"
print("name:", dict["name"])
print("age:", dict["age"])
print("sex:", dict["sex"])
table.remove(table, pos)
从 table 中删除位置为 pos 的元素,并返回这个元素,模拟字典中删除键值对的操作。pos 是可选参数,默认为 table 的长度,如果 pos 指定为负数,则从表尾倒计数。如下示例:
local dict = {name = "John Doe", age = 24, sex = "M"}
table.remove(dict, "sex") -- 删除键值对 sex
print("name:", dict["name"])
print("age:", dict["age"])
print("sex:", dict["sex"])
以上就是 Lua 中常用的一些数据结构及其相关函数的详细介绍。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Lua教程(七):数据结构详解 - Python技术站