"Срез" вложенной таблицы на определённом уровне «башни» из таблиц множественно вложенных в глубину (сами в себя)? Подскажите почему при построении "башни" из таблиц (без явных ключей) в глубину, "срезать" таблицу на определённом уровне можно так: (не забываем про теорию - в луа переменные содержат ссылки на таблицы, а не копии таблиц!)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
142 +1
0
Ответы
1

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

-- определяем уровень, на котором хотим сделать срез
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, но вы можете задать любой другой уровень, который вам необходим.

20 Апр в 13:20
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 989 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир