每日一练之 Lua 表

Lua 的 table 是什么数据结构?如何创建和访问?

数据结构:Lua的table是一种哈希表,使用键值对存储数据,支持动态扩容

创建方式:

lua 复制代码
local t1 = {}
local t2 = {10,20,30}
local t3 = {name="Alice",age=25}

访问方式:

lua 复制代码
print(t2[1])
print(t3.name)
print(t3["age"])

table的索引可以是什么类型?

键(key):可以是任意可哈希类型(如 number、string、boolean、table、function 等),但是 nil 不能作为键(因为 nil 表示"不存在")

值(value):可以是任意类型,包括 nil

lua 复制代码
local t = {}
t[10] = "num"
t["key"] = 20
t[true] = {}
t[t] = function() end

如何遍历table? ipairs 和 pairs 的区别?

ipairs:用于遍历数组部分,遇到第一个 nil 时停止

pairs:遍历整个 table(包括数组和哈希部分),顺序不固定

lua 复制代码
-- ipairs 输出:10
local t = {10,nil,30,name="Alice"}
for i,v in ipairs(t) do
    print(i, v)
end

-- pairs 输出(顺序可能不同):
-- 1   10
-- 3   30
-- name Alice
for k,v in pairs(t) do
	print(k, v)
end

如何删除table中的元素?

lua 复制代码
local t = {10,20,30}
t[10] = nil    -- 删除索引 2 的元素(中间元素删除后,数组长度不变)

local t = {name="Alice",age=25}
t.name = nil
table.remove(t,2) --删除第2 个元素
table.remove(t) --默认删除最后一个元素


for k in pairs(t) do
	t[k] = nil
end

t = {}

table.sort()的注意事项?

  • 仅适用于数组部分
  • 必须提供比较函数(如果比提供,默认按升序比较)
  • 比较函数需满足严格弱序
lua 复制代码
local t = {3,1,4,2}
table.sort(t, function(a,b)
	return a>b
end)
print(table.unpack(t))

如何实现table的深拷贝?

浅拷贝仅复制引用,深拷贝需递归复制所有嵌套 table

lua 复制代码
function deepcopy(t)
	if type(t) ~= table then return t end
	local copy = {}
	for k, v in pairs(t) do
		copy[deepcopy(k)] = deepcopy(v)
	end
	return setmetatable(copy, getmetatable(t))
end

table的元表 metatable 友什么作用?

元表允许自定义 table 的行为(如运算符重载、属性访问等)常见元方法:

  • __index:访问不存在的键时触发
  • __newindex:修改不存在的键时触发
  • __add:定义 +运算法行为

table和数组的区别?

table:动态哈希表,键可以是任意类型(除了 nil),索引可离散

数组:特殊的 table,键为连续整数,通过#获取长度

如何高效的向 table 末尾添加元素?

table.insert(t, 4)

t[#t + 1] = 5

Lua table如何实现几何(Set)?

利用 table 的键唯一性,将元素作为键存储:

lua 复制代码
local set = {}

function set:add(value)
	self[value] = true
end

function set:remove(value)
	self[value] = nil
end

-- 检查元素是否存在
function set:contains(value)
  return self[value] ~= nil
end

-- 使用示例
local s = setmetatable({}, set)
s:add(10)
s:add(20)
print(s:contains(10))  -- 输出:true

坚持每日一题,Lua 功力必涨!🔥

相关推荐
慢慢沉4 天前
Lua(数据库访问)
开发语言·数据库·lua
慢慢沉4 天前
Lua协同程序(coroutine)
lua
慢慢沉4 天前
Lua元表(Metatable)
lua
慢慢沉5 天前
Lua(字符串)
开发语言·lua
慢慢沉5 天前
Lua(数组)
开发语言·lua
慢慢沉5 天前
Lua(迭代器)
开发语言·lua
慢慢沉5 天前
Lua基本语法
开发语言·lua
Feng.Lee5 天前
接口测试Postman工具高级使用技巧
功能测试·测试工具·lua·postman·可用性测试
三翼鸟数字化技术团队6 天前
鸿蒙平台运行Lua脚本
lua·harmonyos