"Срез" вложенной таблицы на определённом уровне «башни» из таблиц множественно вложенных в глубину (сами в себя)? Подскажите почему при построении "башни" из таблиц (без явных ключей) в глубину, "срезать" таблицу на определённом уровне можно так: (не забываем про теорию - в луа переменные содержат ссылки на таблицы, а не копии таблиц!)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
Для правильного среза таблицы из "башни" на определенном уровне, можно использовать следующий подход:
-- определяем уровень, на котором хотим сделать срез local level = 2 -- проходим по таблицам до нужного уровня local pred = t for i = 1, level - 1 do pred = pred[1] end -- срезаем таблицу на нужном уровне local slicedTable = pred[1] pred[1] = slicedTable -- проверяем результат print(t[1][1][1][1]) -- nil, таблица была срезана
Этот код позволит правильно срезать таблицу на определенном уровне вложенности "башни". В данном примере я использовал уровень 2, но вы можете задать любой другой уровень, который вам необходим.
Для правильного среза таблицы из "башни" на определенном уровне, можно использовать следующий подход:
-- определяем уровень, на котором хотим сделать срезlocal level = 2
-- проходим по таблицам до нужного уровня
local pred = t
for i = 1, level - 1 do
pred = pred[1]
end
-- срезаем таблицу на нужном уровне
local slicedTable = pred[1]
pred[1] = slicedTable
-- проверяем результат
print(t[1][1][1][1]) -- nil, таблица была срезана
Этот код позволит правильно срезать таблицу на определенном уровне вложенности "башни". В данном примере я использовал уровень 2, но вы можете задать любой другой уровень, который вам необходим.