将Lua中的字符串转换为数组

为什么这种语法能够运行:

if ({A=1,B=1,C=1})["A"]  then print("hello") end

而这个却不行:

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

if (m)["A"]  then print("hello") end

???

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

点赞
用户258523
用户258523

这一行

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

相当于

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

我希望你同意,这样做显然不会将多个值分配给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
2015-02-25 23:50:47