如何在Lua中从表取值及解决嵌套表遍历打印失败问题
嘿,我来帮你搞定这两个Lua表的问题!
问题1:如何在Lua中从表(table)中获取值?
Lua的表是非常灵活的数据结构,获取值主要有这几种常见方式:
- 通过键直接访问:如果知道元素的键(不管是数字索引还是字符串键),直接用
表名[键]的方式就能拿到值。比如:
对于数组型表(数字索引从1开始),直接用索引访问:local myTable = {name = "Lua", version = 5.4} print(myTable["name"]) -- 输出 "Lua" print(myTable.version) -- 也可以用点语法,仅适用于键是合法标识符的情况local arr = {"a", "b", "c"} print(arr[1]) -- 输出 "a" - 遍历表获取所有值:如果要获取表中所有值,可以用
pairs()(适用于所有类型的表)或者ipairs()(仅适用于连续数字索引的数组型表)遍历:local mixedTable = {10, "hello", key = "value"} -- 用pairs遍历所有键值对 for k, v in pairs(mixedTable) do print("键:" .. k .. ",值:" .. v) end
问题2:打印嵌套表中的每个值
你的嵌套表结构是外层表包含多个只存了一个元素的子表,原来的循环没成功是因为v拿到的是子表本身(比如{'value_1'}),而不是子表里面的字符串值,直接print(v)只会输出表的结构信息,不是你要的内容。
修改方式很简单,遍历外层表时,再取出子表的第一个元素(因为每个子表只有一个元素,索引是1):
local myTable = { {'value_1'}, {'value_2'}, {'value_3'}, {'value_4'} } -- 因为是连续数字索引的数组,用ipairs更合适 for k, subTable in ipairs(myTable) do print(subTable[1]) -- 取出子表的第一个元素 end
如果想按照你说的格式,把所有值放在一行,用空格分隔,可以这样写:
local myTable = { {'value_1'}, {'value_2'}, {'value_3'}, {'value_4'} } local result = "" for k, subTable in ipairs(myTable) do result = result .. "'" .. subTable[1] .. "' " end -- 去掉最后多余的空格 result = string.sub(result, 1, -2) print(result) -- 输出:'value_1' 'value_2' 'value_3' 'value_4'
内容的提问来源于stack exchange,提问作者whiteblXK
相关产品推荐
相关产品推荐

