Lua:将另一张表的键作为树形结构

我真的需要像这样的东西,但在互联网上找不到如何做到这一点的方法。我有一张值表,其中第一个值应该成为另一个表的键,但第二个值应该是前一个值的键,以此类推。如果硬编写,它将看起来像这样:

 tab ["key1"]["key2"]["key3"]...["keyn-1"]["keyn"] = "value"

但是,我有一个动态的键表,并且当我想要插入这个键树时,我不知道它的样子。我想要的解决方案会让我在树的中间添加新分支,例如:

 tab ["key1"]["key2"] = 123
 tab ["key1"]["key3"] = 234
 print(tab.key1.key2) ---> 123
 print(tab.key1.key3) ---> 234

** 解决示例:**

我有:

 tab1 = {"town", "home", 1, "cake"}
 value = 1.032
 tab2 = {}

我想要的是:

 print(tab2.town.home.1.cake) ---> 1.032
点赞
用户1847592
用户1847592

本地函数 read_nested_keys(tbl, keys) 实现了在 Lua table 中按嵌套键读取值的功能。其接受两个参数:第一个参数 tbl 是要读取值的 table,第二个参数 keys 是一个包含嵌套键的 table。函数会根据 keys 中的顺序逐层寻找嵌套的子 table,最终返回找到的值。如果中途找到的值为 nil,函数会返回 nil

本地函数 write_nested_keys(value, tbl, keys) 实现了在 Lua table 中按嵌套键写入值的功能。其接受三个参数:第一个参数 value 是要写入的值,第二个参数 tbl 是要写入值的 table,第三个参数 keys 是一个包含嵌套键的 table。函数会根据 keys 中的顺序逐层寻找嵌套的子 table,最终在最后一层嵌套上写入值。如果在途中某个子 table 不存在,则会被创建。

示例:

local keys = {"town", "home", 1, "cake"}
local value = 1.032
local root = {}

print(read_nested_keys(root, keys)) ---> nil

write_nested_keys(value, root, keys)

print(root.town.home[1].cake)       ---> 1.032
print(read_nested_keys(root, keys)) ---> 1.032
2017-04-23 09:44:24