• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

关闭

返回栏目

关闭

返回Lua栏目

20 - 表类型 - 关联数组 - 以键值对方式存储数据

作者:

贺及楼

成为作者

更新日期:2025-02-27 21:43:02

Lua 表类型 - 关联数组 - 以键值对方式存储数据

引言

在 Lua 编程语言中,表(table)是一种非常强大且灵活的数据结构。它可以被看作是关联数组,也就是以键值对的方式来存储数据。这种特性使得表在 Lua 中应用广泛,无论是简单的数据存储,还是复杂的数据管理和算法实现,表都能发挥重要作用。本文将深入探讨 Lua 表作为关联数组的特性、使用方法以及一些实用的例子。

表的基本概念

在 Lua 中,表是一种动态的数据结构,它可以存储任意类型的值,包括数字、字符串、函数甚至其他表。表的键可以是除了 nil 以外的任何类型,值可以是任意类型。表的创建非常简单,使用大括号 {} 即可。

演示代码

  1. -- 创建一个空表
  2. local myTable = {}
  3. -- 向表中添加键值对
  4. myTable["name"] = "John"
  5. myTable["age"] = 30
  6. myTable[1] = "apple"
  7. -- 访问表中的值
  8. print(myTable["name"]) -- 输出: John
  9. print(myTable["age"]) -- 输出: 30
  10. print(myTable[1]) -- 输出: apple

表的初始化和访问

初始化表

除了逐个添加键值对,还可以在创建表时直接初始化。

  1. -- 直接初始化表
  2. local student = {
  3. name = "Alice",
  4. age = 20,
  5. grades = {math = 90, english = 85}
  6. }
  7. -- 访问表中的值
  8. print(student.name) -- 输出: Alice
  9. print(student.grades.math) -- 输出: 90

访问表中的值

可以使用方括号 [] 或点号 . 来访问表中的值。使用方括号时,键可以是变量或表达式;使用点号时,键必须是合法的标识符。

  1. local key = "name"
  2. print(student[key]) -- 输出: Alice

表的遍历

Lua 提供了两种主要的方式来遍历表:pairsipairs

pairs 遍历

pairs 可以遍历表中的所有键值对,包括非连续的键。

  1. local fruit = {
  2. ["apple"] = 1,
  3. ["banana"] = 2,
  4. ["cherry"] = 3
  5. }
  6. for key, value in pairs(fruit) do
  7. print(key.. ": ".. value)
  8. end

ipairs 遍历

ipairs 主要用于遍历数组部分,也就是键为连续整数的部分,从 1 开始,遇到第一个 nil 就停止。

  1. local numbers = {10, 20, 30, nil, 40}
  2. for index, value in ipairs(numbers) do
  3. print(index.. ": ".. value)
  4. end

实用例子

统计单词出现次数

  1. local text = "hello world hello lua"
  2. local words = {}
  3. -- 分割字符串
  4. for word in string.gmatch(text, "%w+") do
  5. if words[word] then
  6. words[word] = words[word] + 1
  7. else
  8. words[word] = 1
  9. end
  10. end
  11. -- 输出统计结果
  12. for word, count in pairs(words) do
  13. print(word.. ": ".. count)
  14. end

模拟数据库记录

  1. local employees = {
  2. {id = 1, name = "Tom", department = "HR"},
  3. {id = 2, name = "Jane", department = "IT"},
  4. {id = 3, name = "Bob", department = "Finance"}
  5. }
  6. -- 查找 IT 部门的员工
  7. for _, employee in ipairs(employees) do
  8. if employee.department == "IT" then
  9. print(employee.name)
  10. end
  11. end

总结

操作 方法 说明
创建表 {} 使用大括号创建一个空表
添加键值对 table[key] = value 向表中添加或修改键值对
访问值 table[key]table.key 使用方括号或点号访问表中的值
遍历表 pairs 遍历表中的所有键值对
遍历数组部分 ipairs 遍历表中连续整数键的部分

通过以上的介绍和例子,我们可以看到 Lua 表作为关联数组的强大之处。它可以方便地存储和管理各种类型的数据,并且提供了丰富的操作方法。在实际的 Lua 编程中,合理运用表可以让代码更加简洁、高效。