如何用for+if在Lua表t中查找指定子表?及子表转字符串
Lua 表操作:查找匹配子表与子表转字符串
1. 遍历查找与input匹配的子表
通过for...pairs循环遍历表t的所有键,结合if判断键是否与input值一致,即可定位目标子表:
input = "var1" local t = { var1 = {name = "test", value = 123}, var2 = {type = "demo", data = "hello"}, var3 = {flag = true, num = 456}, }; -- 查找匹配的子表 local targetSubTable for key, subTable in pairs(t) do if key == input then targetSubTable = subTable break -- 找到后终止循环,减少不必要的遍历 end end -- 输出结果 if targetSubTable then print("找到匹配的子表:", targetSubTable) else print("未找到与input匹配的子表") end
这段代码会遍历表t的所有键值对,当键与input完全匹配时,将对应子表赋值给targetSubTable并退出循环,最后根据结果输出提示信息。
2. 将子表var1转换为字符串
Lua没有内置的表转字符串工具,我们可以实现一个递归函数,处理表的嵌套结构,生成可读性强的字符串:
-- 递归实现表转字符串的函数 local function tableToString(tbl, indent) indent = indent or 0 local str = string.rep(" ", indent) .. "{\n" indent = indent + 1 for k, v in pairs(tbl) do str = str .. string.rep(" ", indent) -- 格式化键的输出 if type(k) == "string" then str = str .. string.format('"%s" = ', k) else str = str .. string.format("[%s] = ", k) end -- 根据值的类型处理输出 if type(v) == "table" then str = str .. tableToString(v, indent) .. ",\n" elseif type(v) == "string" then str = str .. string.format('"%s",\n', v) else str = str .. tostring(v) .. ",\n" end end indent = indent - 1 str = str .. string.rep(" ", indent) .. "}" return str end -- 转换var1子表为字符串 local var1Str = tableToString(t.var1) print("var1子表转换后的字符串:\n", var1Str)
该函数会递归遍历表的每一个元素,根据元素类型(字符串、数字、嵌套表等)进行格式化,生成类似Lua表定义格式的字符串,确保嵌套结构也能清晰展示。
内容的提问来源于stack exchange,提问作者Mefisto1029
相关产品推荐
相关产品推荐

