Lua中将字符串转换为数组

use*_*522 2 lua luajit

为什么这个语法有效:

if ({A=1,B=1,C=1})["A"]  then print("hello") end
Run Code Online (Sandbox Code Playgroud)

虽然这不会:

local m = {string.sub(string.gsub("A,B,C,", ",", "=1,"),1,-2)}

if (m)["A"]  then print("hello") end
Run Code Online (Sandbox Code Playgroud)

???

我认为这是因为字符串不是数组,但是如何将字符串("a,b,c")转换为数组({a=1,b=1,c=1})?

Eta*_*ner 5

这条线

local m = {string.sub(string.gsub("A,B,C,", ",", "=1,"),1,-2)}
Run Code Online (Sandbox Code Playgroud)

相当于这个

local v = string.sub(string.gsub("A,B,C,", ",", "=1,"),1,-2)
local m = {v}
Run Code Online (Sandbox Code Playgroud)

我希望您同意,这显然不会有在表中分配多个值的行为m

要将简单a=1,b=1,c=1类型字符串“解析”到表中,string.gmatch手册中的第二个示例很有帮助:

下一个示例将给定字符串中的所有 key=value 对收集到表中:

t = {}
s = "from=world, to=Lua"
for k, v in string.gmatch(s, "(%w+)=(%w+)") do
  t[k] = v
end
Run Code Online (Sandbox Code Playgroud)

  • 注:两个样本总体上并不等价;第二个示例将“string.sub”的结果截断为一个值,而第一个示例将在数组中存储所有返回值。 (2认同)