"Срез" вложенной таблицы на определённом уровне «башни» из таблиц множественно вложенных в глубину (сами в себя)? Подскажите почему при построении "башни" из таблиц (без явных ключей) в глубину, "срезать" таблицу на определённом уровне можно так: (не забываем про теорию - в луа переменные содержат ссылки на таблицы, а не копии таблиц!)local t = {{{{{}}}}} -- 4 вложенных
local g = t
local tst = t[1][1][1]
print(t[1][1][1][1]) -- table:
t[1][1] = t[1][1][1]
print(t[1][1] == tst, t[1][1][1][1] ) -- true, nil срезалась и "хвост" подтянула!
-- А так нельзя
print( t[1][1][1][1] ) -- table:
local a = t[1][1]
local b = t[1][1][1]
a = b
print( t[1][1][1][1] ) -- table: хвост не подтянут!
print( t[1][1] == g[1][1], t[1][1]== tst) -- true, false
-- и срез не произошёл! Проверим ещ переменные:
print( a == g[1][1], b == g[1][1], a==b) -- false, false, true
print(a == g[1][1][1], b == g[1][1[1]]) -- true, true
print(a == t[1][1][1], b == t[1][1[1]]) -- true, true
print(t==g) -- true
Как можно программно реализовать правильный срез таблицы из "башни", если вложенную таблицу на определённом уровне я получаю циклом:local pred = t
while (pred) do
pred = pred[1]
if pred == t[1][1] then
pred = pred[1] -- не работает так. см 2 пример
end
end

21 Авг 2019 в 06:20
205 +2
0
Ответы
1

Для правильного среза таблицы из "башни" на определенном уровне, можно использовать следующий подход:

-- определяем уровень, на котором хотим сделать срез
local level = 2
-- проходим по таблицам до нужного уровня
local pred = t
for i = 1, level - 1 do
pred = pred111 end
-- срезаем таблицу на нужном уровне
local slicedTable = pred111 pred111 = slicedTable
-- проверяем результат
printt[1][1][1][1]t[1][1][1][1]t[1][1][1][1] -- nil, таблица была срезана

Этот код позволит правильно срезать таблицу на определенном уровне вложенности "башни". В данном примере я использовал уровень 2, но вы можете задать любой другой уровень, который вам необходим.

20 Апр 2024 в 13:20
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир