lua - 如何使用字符串初始化表格

我有如下字符串:

mystring ="a=test;b=12345"

我想知道如何一次性初始化表格并将其赋值为该字符串的值。该字符串源自另一个外部应用程序,如果可能,我想避免将其拆分。类似这样的东西:

mytable = {mystring:gsub(";",",")}

是否可以这样做?我知道如何分步骤完成...但只是想知道能否一次性完成。

这是我尝试过的内容和相应的输出:

> mystring ="a=123;b=2345"
> myarray = {mystring:gsub(";",",")}
> for key,value in pairs(myarray) do print(key,value) end
1   a=123,b=2345
2   1
>

而我希望结束时得到像这样的数组/表:

key   value
a       123
b       2345
点赞
用户308010
用户308010
mytable = {}
for key, value in string.gmatch("a=123;b=456", "(%w+)=(%w+)") do
    mytable[key] = value
end

print(mytable.a, mytable.b)

输出结果:

123

456

和预期一样。当然,这仅适用于字母数字和无标点符号的情况。

2016-04-05 16:21:07
用户107090
用户107090

尝试使用以下代码,让 Lua 完成繁重的工作:

function parse(s)
    local t={}
    load(s,"",nil,t)()
    return t
end

mytable=parse("a=123;b=2345")
for k,v in pairs(mytable) do print(k,v) end

请注意,这会执行给定字符串中的代码,如果来自不可信源,则可能会造成安全风险。另一方面,由于代码在空环境中执行,因此不能影响现有的变量,因此造成的损害是有限的。但是,恶意代码可能包含无限循环或消耗所有内存。

2016-04-05 17:39:26
用户1847592
用户1847592

-- 需要 Lua 5.2 以上版本 function string_to_table (str) local result = {} load(str, '', 't', setmetatable({}, { __index = function(t,k) return k end, __newindex = result }))() return result end

mytable = string_to_table("a=test;b=12345;c=a") -- {a="test", b=12345, c="a"}

2016-04-05 17:41:27