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

时间:2015-02-25 23:27:03

标签: lua luajit

为什么这种语法有效:

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})?

1 个答案:

答案 0 :(得分:4)

这一行

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