- Я новичок в Lua (например, вчера новый), поэтому, пожалуйста, потерпите меня ...
- Я прошу прощения за запутанный характер этого вопроса, но у меня не было лучшего представления окак продемонстрировать то, что я пытаюсь сделать:
У меня есть таблица Lua, используемая в качестве словаря. Кортежи (?) Не нумеруются, но в основном используют строковые индексы. Многие из индексов на самом деле относятся к подстолям, которые содержат более подробную информацию, а некоторые из индексов в этих таблицах относятся к еще большему количеству таблиц - некоторые из них имеют три или четыре "уровня" глубины.
Мне нужносоздать функцию, которая может искать конкретное описание элемента по нескольким «уровням» в структуре словаря, не зная заранее, какие ключи / субключи / субподключения привели меня к нему. Я пытался сделать это с помощью переменных и циклов for
, но столкнулся с проблемой, когда два ключа в строке динамически тестируются с использованием этих переменных.
В приведенном ниже примере я пытаюсьполучить значение:
myWarehouselist.Warehouse_North.departments.department_one["rjXO./SS"].item_description
Но так как я не знаю заранее, что я смотрю в "Warehouse_North" или в "Department_one", я бегу через этиальтернативы, использующие переменные, ищущие конкретный идентификатор элемента "rjXO./SS" и, таким образом, ссылка на это значение в конечном итоге выглядит следующим образом:
myWarehouseList[warehouse_key].departments[department_key][myItemID]...?
По сути, проблема Iу меня есть, когда мне нужно поместить две переменные в цепочку ссылок значения, хранящегося на уровне N словаря. Я не могу написать это как [x] [y], или как [x [y]], или как [xy], или как [x]. [Y] ... Я понимаю, что в Lua, xyэто не то же самое, что x [y] (первый напрямую ссылается на ключ по строковому индексу "y", а второй использует значение, хранящееся в переменной "y", которая может быть чем угодно.)
IЯ пробовал много разных способов и только получил ошибки.
Что интересно, если я использую точно такой же подход, но добавляю дополнительный «уровень» в словарь с постоянным значением, например [«items»] (под каждым конкретным отделом), это позволяет мнечтобы ссылаться на значение без проблем, и мой скрипт работает нормально ...
myWarehouseList[warehouse_key].departments[department_key].items[item_key].item_description
Так должен выглядеть синтаксис Lua? Я изменил структуру таблицы, чтобы включить дополнительный слой «предметов» в каждом отделе, но он кажется излишним и ненужным. Есть ли синтаксическое изменение, которое я могу сделать, чтобы позволить мне использовать две переменные в цепочке ссылок на значения таблицы Lua?
Заранее спасибо за любую помощь!
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