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

相关推荐
13 小时前
Lua基础复习之Lua元表
开发语言·lua
利来利往4 天前
Lua 的闭包(closure)特性
lua
IT_10244 天前
springboot从零入门之接口测试!
java·开发语言·spring boot·后端·spring·lua
编程乐学(Arfan开发工程师)5 天前
56、原生组件注入-原生注解与Spring方式注入
java·前端·后端·spring·tensorflow·bug·lua
为你写首诗ge7 天前
【热更新知识】学习一 Lua语法学习
unity·lua
为你写首诗ge7 天前
【热更新知识】学习三 XLua学习
unity·lua
究極の法則に通じた野犬8 天前
魔兽世界正式服插件与宏-敏锐盗贼实用宏探索(1)-宏命令制作入门与基本知识
网络·游戏·lua
·云扬·8 天前
【PmHub面试篇】PmHub中基于Redis加Lua脚本的计数器算法限流实现面试专题解析
redis·面试·lua
什么都想学的阿超11 天前
【Redis系列 03】掌握Redis编程艺术:事务、管道与Lua脚本完全指南
redis·junit·lua