我有以下字符串:
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
答案 0 :(得分:5)
试试这个,这让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
请注意,这将执行给定字符串中的代码,如果它来自不受信任的来源,则可能会有危险。另一方面,损坏是有限的,因为代码在空的环境中执行,因此不会影响现有的变量。但恶意代码可能包含无限循环或占用所有内存。
答案 1 :(得分:5)
-- Lua 5.2+ required
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"}
答案 2 :(得分:2)
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
正如所料。当然,这仅适用于字母数字和没有标点符号。