每日一练之 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 功力必涨!🔥

相关推荐
上海合宙LuatOS2 天前
Air8000多网通信- RNDIS/ECM
物联网·lua·嵌入式开发·多网通信
Linux运维技术栈2 天前
一次暴力枚举攻击的防御实践:从 IP 封禁到 WAF,再到 Nginx+Lua 业务层防御
tcp/ip·nginx·安全·lua·云服务器
诙_3 天前
由C++速通Lua
开发语言·lua
yeshan6 天前
【Draft】基于 cluacov 的 Lua 代码分支覆盖率统计:从行级近似到指令级精确
单元测试·lua
zz0723206 天前
Redis + Lua 实现高性能分布式限流
redis·lua·aop·限流算法·分布式限流
衣舞晨风6 天前
运行时行为盲区:API7 AI 网关CPU打满故障的AI辅助事后复盘
lua·openresty·apisix·coroutine·cpu-saturation·socket-buffer
笨鸟先飞的橘猫9 天前
基于Skynet的分布式游戏场景题:大型MMO的跨服战场系统设计
分布式·学习·游戏·面试·lua
Huanzhi_Lin11 天前
skynet笔记
笔记·lua·skynet·actor·actor模型
笨鸟先飞的橘猫11 天前
MMO游戏中的“跨服团队副本”匹配与状态同步系统
分布式·学习·游戏·lua·skynet
Kiyra12 天前
限流不是加个计数器就行:用 Lua 脚本实现多维度原子限流
开发语言·人工智能·网络协议·职场和发展·架构·lua·ai-native