Lua层次结构字符串到表

时间:2013-07-11 05:27:01

标签: lua lua-table

有没有办法可以将层次结构字符串转换为表格形式?

假设输入为A.B.C.D

输出应该是一个遍历输入的表: A = {} A.B = {} A.B.C = {} A.B.C.D = {}

感谢。

2 个答案:

答案 0 :(得分:5)

显而易见的解决方案是解析字符串并从中构造层次结构表。但更聪明的解决方案是让lua为你做。通过一些metamagic和函数环境操作,可以做到这一点:

dump = require 'pl.pretty'.dump -- convenient table dumper from penlight

function createtable(str)
  local env_mt = {}
  env_mt.__index = function(t, k)
                     rawset(t, k, setmetatable({}, env_mt))
                     return rawget(t, k)
                   end
  local env = setmetatable({}, env_mt)
  local f = loadstring("return "..str)
  setfenv(f, env)
  f()
  return env
end

dump( createtable "A.B.C.D" )

此输出:

{
  A = {
    B = {
      C = {
        D = {
        }
      }
    }
  }
}

答案 1 :(得分:5)

@ greatwolf的答案是正确的,但我更喜欢“解析”字符串和构建表格的更直接的方法。不太神奇,并且您不执行从(可能的)用户定义的字符串加载的函数,这将是一个安全问题。

local createtable = function(str)
  local top = {}
  local cur = top
  for i in str:gmatch("[^.]+") do
    cur[i] = {}
    cur = cur[i]
  end
  return top
end

(require "pl.pretty").dump(createtable("A.B.C.D"))