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

4
我有以下字符串:
 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
3个回答

6
-- 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"}

1
@lhf - 的确,它只适用于“未定义”的变量。现已修复,将所有变量转换为字符串。 - Egor Skriptunoff

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

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

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
正如预期的那样。当然,这仅适用于字母数字字符而没有标点符号。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接