当前位置:   article > 正文

Lua table(表)

Lua table(表)

在 Lua 中,表(table)是一种非常强大和灵活的数据结构,可以被用作数组、字典(哈希表)、集合等。表是由键值对组成的无序集合。Lua 的表可以包含任何类型的数据,并且支持动态增长和收缩。下面是如何在 Lua 中使用表的示例和说明:

创建表

表可以通过花括号 {} 来创建,并且可以初始化为空或带有初始值。

示例
-- 创建一个空表
local emptyTable = {}

-- 创建一个带有初始值的表
local numbers = {1, 2, 3, 4, 5}
local students = {"Alice", "Bob", "Charlie"}

-- 创建一个带有键值对的表
local studentAges = {
    ["Alice"] = 25,
    ["Bob"] = 30,
    ["Charlie"] = 22
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

访问表元素

可以使用方括号 [] 来访问表中的元素。

示例
local students = {"Alice", "Bob", "Charlie"}

-- 访问第一个元素
print(students[1])  -- 输出 "Alice"

-- 访问第三个元素
print(students[3])  -- 输出 "Charlie"

-- 访问键为 "Alice" 的值
local studentAges = {
    ["Alice"] = 25,
    ["Bob"] = 30,
    ["Charlie"] = 22
}
print(studentAges["Alice"])  -- 输出 25
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

修改表元素

可以直接通过索引或键来修改表中的元素。

示例
local students = {"Alice", "Bob", "Charlie"}

-- 修改第二个元素
students[2] = "David"

-- 输出修改后的表
for i, student in ipairs(students) do
    print(i, student)
end
-- 输出:
-- 1 Alice
-- 2 David
-- 3 Charlie
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

添加表元素

可以使用索引或键来添加新的元素到表中。

示例
local students = {"Alice", "Bob", "Charlie"}

-- 使用索引添加元素
students[4] = "David"

-- 使用键添加元素
local studentAges = {
    ["Alice"] = 25,
    ["Bob"] = 30,
    ["Charlie"] = 22
}
studentAges["David"] = 20

-- 输出更新后的表
for name, age in pairs(studentAges) do
    print(name, age)
end
-- 输出:
-- Alice 25
-- Bob 30
-- Charlie 22
-- David 20
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

删除表元素

可以使用 table.remove 函数删除数组形式的表中的元素,或者使用索引或键来删除表中的元素。

示例
local students = {"Alice", "Bob", "Charlie"}

-- 删除最后一个元素
table.remove(students)

-- 删除特定索引处的元素
table.remove(students, 2)

-- 输出更新后的表
for i, student in ipairs(students) do
    print(i, student)
end
-- 输出:
-- 1 Alice

-- 删除键为 "Bob" 的元素
local studentAges = {
    ["Alice"] = 25,
    ["Bob"] = 30,
    ["Charlie"] = 22
}
studentAges["Bob"] = nil

-- 输出更新后的表
for name, age in pairs(studentAges) do
    print(name, age)
end
-- 输出:
-- Alice 25
-- Charlie 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

遍历表

可以使用 ipairspairs 函数来遍历表中的元素。

示例
local numbers = {1, 2, 3, 4, 5}

-- 使用 ipairs 遍历数组形式的表
for i, num in ipairs(numbers) do
    print(i, num)
end
-- 输出:
-- 1 1
-- 2 2
-- 3 3
-- 4 4
-- 5 5

-- 使用 pairs 遍历字典形式的表
local studentAges = {
    ["Alice"] = 25,
    ["Bob"] = 30,
    ["Charlie"] = 22
}
for name, age in pairs(studentAges) do
    print(name, age)
end
-- 输出可能为:
-- Alice 25
-- Bob 30
-- Charlie 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

获取表长度

对于数组形式的表,可以使用 # 运算符来获取长度。

示例
local numbers = {1, 2, 3, 4, 5}

-- 获取数组长度
print(#numbers)  -- 输出 5
  • 1
  • 2
  • 3
  • 4

示例:使用表统计字符串中的字符

下面是一个示例,展示了如何使用 Lua 中的表来统计一个字符串中的字符出现次数。

function countCharacters(s)
    local counts = {}
    for i = 1, #s do
        local char = s:sub(i, i)
        counts[char] = (counts[char] or 0) + 1
    end
    return counts
end

local str = "hello world"
local charCounts = countCharacters(str)

for char, count in pairs(charCounts) do
    print(char .. ": " .. count)
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

示例:使用表实现栈

下面是一个示例,展示了如何使用 Lua 中的表来实现一个简单的栈数据结构。

local Stack = {}

function Stack.new()
    local stack = {}
    function stack.push(item)
        table.insert(stack, item)
    end
    function stack.pop()
        if #stack > 0 then
            return table.remove(stack)
        end
    end
    function stack.isEmpty()
        return #stack == 0
    end
    return stack
end

local myStack = Stack.new()

myStack.push(10)
myStack.push(20)
print(myStack.pop())  -- 输出 20
print(myStack.pop())  -- 输出 10
print(myStack.isEmpty())  -- 输出 true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

这些是在 Lua 中使用表的基本方法。如果您需要更详细的解释或有其他问题,请随时提问!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/963964
推荐阅读
  

闽ICP备14008679号