如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?

我想将一个字符串转换为数组(一个带有坐标、颜色等的小地图),该字符串表示一个嵌套数组,我不确定如何做到这一点。我想在第一个 { 后打开一个数组 ,然后在每个 { 后打开一个数组,并读取键/值,直到 }:

function stringToArray()
    local Array = {}
    local txt = "{ {Group = 123, Pos = 200}, {Group = 124, Pos = 205} }"
    for str in string.gmatch(txt, .....
end

原文链接 https://stackoverflow.com/questions/71334887

点赞
stackoverflow用户1514861
stackoverflow用户1514861

由于该字符串实际上是有效的 lua 语法,因此您可以使用 load() 来执行它。

例如:

local txt = "{ {Group = 123, Pos = 200}, {Group = 124, Pos = 205} }"
local Array = load("return " .. txt)()
print(Array[1].Group) --输出 123

注意:对于 lua 版本 5.1 或更低版本,应使用函数 loadstring()

2022-03-03 10:51:22
stackoverflow用户11740758
stackoverflow用户11740758

如果没有像load()这样可能沙盒化的函数,你必须解析字符串并构建所需的键/值对。

一个好的决策/条件和分析的想法是计算不需要构建的内容...

local txt = "{ {Group = 123, Pos = 200}, {Group = 124, Pos = 205} }"
local _, lcurlies = txt:gsub('%{','')
local _, rcurlies = txt:gsub('%}','')
local _, commas = txt:gsub(',','')
local _, spaces = txt:gsub('%s','')
local _, equals = txt:gsub('=','')

print(lcurlies,rcurlies,commas,spaces,equals)
-- 输出:3 3 3 13 4
2022-03-05 22:37:24