Lua将字符串转换为更多数组

时间:2017-03-08 23:34:38

标签: lua

我需要一种方法将此字符串rec[]转换为此

"foo/bar/test/hello"

感谢。

3 个答案:

答案 0 :(得分:3)

你可以使用string.gmatch拆分它,然后只需构建你想要的表,试试这个:

local pprint = require('pprint')

example="foo/bar/test/hello"
v={}
s=v
for i in string.gmatch(example, "(%w+)") do
    v[i]={}
    v=v[i]
end

pprint(s)

PS。在打印表中,我在这里使用pprint

答案 1 :(得分:1)

递归是一种自然的工具。这是一个解决方案。为简单起见,convert返回一个表。

S="foo/bar/test/hello"

function convert(s)
    local a,b=s:match("^(.-)/(.-)$")
    local t={}
    if a==nil then
        a=s
        t[a]={}
    else
        t[a]=convert(b)
    end
    return t
end

function dump(t,n)
    for k,v in pairs(t) do
        print(string.rep("\t",n)..k,v)
        dump(v,n+1)
    end
end

z=convert(S)
dump(z,0)

如果您确实需要设置全局变量foo,请在结尾处执行此操作:

k,v=next(z); _G[k]=v
print(foo)

答案 2 :(得分:0)

这是另一种(非递归)可能性:

function show(s)
  local level = 0
  for s in s:gmatch '[^/]+' do
    io.write('\n',(' '):rep(level) .. s .. ' = {')
    level = level + 2
  end
  for level = level-2, 0, -2 do
    io.write('}',level > 0 and ',\n' or '\n',(' '):rep(level-2))
  end
end

show 'foo/bar/test/hello'