使用多个变量引用 Lua 字典中的子子子字段
Using Multiple Variables to Reference a Sub-Sub-Sub Field in a Lua Dictionary
- 我是 Lua 的新手(就像昨天新的一样),所以请多多包涵...
- 对于这个问题的复杂性,我深表歉意,但我不知道如何证明我正在尝试做的事情:
我有一个 Lua table 用作字典。元组(?)没有数字索引,但主要使用字符串索引。许多索引实际上与包含更详细信息的子 table 相关,而那些 table 中的一些索引与更多 table 相关——其中一些是三个或四"levels"深
我需要创建一个功能,可以在字典结构中从多个 "levels" 中搜索特定的项目描述,而无需提前知道是哪个 keys/sub-keys/sub-sub-keys 引导我找到它的。我曾尝试使用变量和 for
循环来做到这一点,但是 运行 遇到了使用这些变量动态测试连续两个键的问题。
在下面的示例中,我尝试获取值:
myWarehouselist.Warehouse_North.departments.department_one["rjXO./SS"].item_description
但是由于我事先不知道我是在 "Warehouse_North" 中查找,还是在 "department_one" 中查找,我 运行 通过这些使用变量的替代方法,搜索特定项目 ID "rjXO./SS",因此对该值的引用最终如下所示:
myWarehouseList[warehouse_key].departments[department_key][myItemID]...?
基本上,我遇到的问题是当我需要将两个变量背靠背放入存储在字典级别 N 的值的引用链中时。我似乎无法将其写成 [x][y]、[x[y]]、[x.y] 或 [x].[y]... 我明白在Lua中,x.y与x[y]不同(前者直接通过字符串索引"y"引用一个键,而后者使用存储在变量[=51中的值=],可以是任何东西。)
我尝试了很多不同的方法,但只遇到错误。
有趣的是,如果我使用完全相同的方法,但向具有常量值的字典添加额外的 "level",例如 ["items"](在每个特定部门下),它允许我毫无问题地引用该值,我的脚本 运行 很好...
myWarehouseList[warehouse_key].departments[department_key].items[item_key].item_description
Lua 语法应该是这样的吗?我已经更改了 table 结构以在每个部门下包含额外的 "items" 层,但这似乎是多余且不必要的。是否可以进行语法更改以允许我在 Lua table 值引用链中背靠背使用两个变量?
在此先感谢您的帮助!
myWarehouseList = {
["Warehouse_North"] = {
["description"] = "The northern warehouse"
,["departments"] = {
["department_one"] = {
["rjXO./SS"] = {
["item_description"] = "A description of item 'rjXO./SS'"
}
}
}
}
,["Warehouse_South"] = {
["description"] = "The southern warehouse"
,["departments"] = {
["department_one"] = {
["rjXO./SX"] = {
["item_description"] = "A description of item 'rjXO./SX'"
}
}
}
}
}
function get_item_description(item_id)
myItemID = item_id
for warehouse_key, warehouse_value in pairs(myWarehouseList) do
for department_key, department_value in pairs(myWarehouseList[warehouse_key].departments) do
for item_key, item_value in pairs(myWarehouseList[warehouse_key].departments[department_key]) do
if item_key == myItemID
then
print(myWarehouseList[warehouse_key].departments[department_key]...?)
-- [department_key[item_key]].item_description?
-- If I had another level above "department_X", with a constant key, I could do it like this:
-- print(
-- "\n\t" .. "Item ID " .. item_key .. " was found in warehouse '" .. warehouse_key .. "'" ..
-- "\n\t" .. "In the department: '" .. dapartment_key .. "'" ..
-- "\n\t" .. "With the description: '" .. myWarehouseList[warehouse_key].departments[department_key].items[item_key].item_description .. "'")
-- but without that extra, constant "level", I can't figure it out :)
else
end
end
end
end
end
如果充分利用循环变量,就不需要那么长的索引链。您似乎只依赖于关键变量,但实际上是值变量拥有您需要的大部分信息:
function get_item_description(item_id)
for warehouse_key, warehouse_value in pairs(myWarehouseList) do
for department_key, department_value in pairs(warehouse_value.departments) do
for item_key, item_value in pairs(department_value) do
if item_key == item_id then
print(warehouse_key, department_key, item_value.item_description)
end
end
end
end
end
get_item_description'rjXO./SS'
get_item_description'rjXO./SX'
- 我是 Lua 的新手(就像昨天新的一样),所以请多多包涵...
- 对于这个问题的复杂性,我深表歉意,但我不知道如何证明我正在尝试做的事情:
我有一个 Lua table 用作字典。元组(?)没有数字索引,但主要使用字符串索引。许多索引实际上与包含更详细信息的子 table 相关,而那些 table 中的一些索引与更多 table 相关——其中一些是三个或四"levels"深
我需要创建一个功能,可以在字典结构中从多个 "levels" 中搜索特定的项目描述,而无需提前知道是哪个 keys/sub-keys/sub-sub-keys 引导我找到它的。我曾尝试使用变量和 for
循环来做到这一点,但是 运行 遇到了使用这些变量动态测试连续两个键的问题。
在下面的示例中,我尝试获取值:
myWarehouselist.Warehouse_North.departments.department_one["rjXO./SS"].item_description
但是由于我事先不知道我是在 "Warehouse_North" 中查找,还是在 "department_one" 中查找,我 运行 通过这些使用变量的替代方法,搜索特定项目 ID "rjXO./SS",因此对该值的引用最终如下所示:
myWarehouseList[warehouse_key].departments[department_key][myItemID]...?
基本上,我遇到的问题是当我需要将两个变量背靠背放入存储在字典级别 N 的值的引用链中时。我似乎无法将其写成 [x][y]、[x[y]]、[x.y] 或 [x].[y]... 我明白在Lua中,x.y与x[y]不同(前者直接通过字符串索引"y"引用一个键,而后者使用存储在变量[=51中的值=],可以是任何东西。)
我尝试了很多不同的方法,但只遇到错误。
有趣的是,如果我使用完全相同的方法,但向具有常量值的字典添加额外的 "level",例如 ["items"](在每个特定部门下),它允许我毫无问题地引用该值,我的脚本 运行 很好...
myWarehouseList[warehouse_key].departments[department_key].items[item_key].item_description
Lua 语法应该是这样的吗?我已经更改了 table 结构以在每个部门下包含额外的 "items" 层,但这似乎是多余且不必要的。是否可以进行语法更改以允许我在 Lua table 值引用链中背靠背使用两个变量?
在此先感谢您的帮助!
myWarehouseList = {
["Warehouse_North"] = {
["description"] = "The northern warehouse"
,["departments"] = {
["department_one"] = {
["rjXO./SS"] = {
["item_description"] = "A description of item 'rjXO./SS'"
}
}
}
}
,["Warehouse_South"] = {
["description"] = "The southern warehouse"
,["departments"] = {
["department_one"] = {
["rjXO./SX"] = {
["item_description"] = "A description of item 'rjXO./SX'"
}
}
}
}
}
function get_item_description(item_id)
myItemID = item_id
for warehouse_key, warehouse_value in pairs(myWarehouseList) do
for department_key, department_value in pairs(myWarehouseList[warehouse_key].departments) do
for item_key, item_value in pairs(myWarehouseList[warehouse_key].departments[department_key]) do
if item_key == myItemID
then
print(myWarehouseList[warehouse_key].departments[department_key]...?)
-- [department_key[item_key]].item_description?
-- If I had another level above "department_X", with a constant key, I could do it like this:
-- print(
-- "\n\t" .. "Item ID " .. item_key .. " was found in warehouse '" .. warehouse_key .. "'" ..
-- "\n\t" .. "In the department: '" .. dapartment_key .. "'" ..
-- "\n\t" .. "With the description: '" .. myWarehouseList[warehouse_key].departments[department_key].items[item_key].item_description .. "'")
-- but without that extra, constant "level", I can't figure it out :)
else
end
end
end
end
end
如果充分利用循环变量,就不需要那么长的索引链。您似乎只依赖于关键变量,但实际上是值变量拥有您需要的大部分信息:
function get_item_description(item_id)
for warehouse_key, warehouse_value in pairs(myWarehouseList) do
for department_key, department_value in pairs(warehouse_value.departments) do
for item_key, item_value in pairs(department_value) do
if item_key == item_id then
print(warehouse_key, department_key, item_value.item_description)
end
end
end
end
end
get_item_description'rjXO./SS'
get_item_description'rjXO./SX'