Вы создаете таблицы над циклом.Внутри цикла вы только извлекаете и добавляете значения в существующие таблицы, но для того, чтобы ваш код работал, вам нужно генерировать новые таблицы на каждой итерации.
Помещение print(table.concat(t,', '))
между строками вашего кода поможет вамчтобы понять, что происходит.«Правильный» вариант выглядит следующим образом:
local t = {1,2,3,4,5}
local t2
while #t>1 do
t2={}
table.insert(t2, t[1] + t[2])
table.remove(t, 1)
table.remove(t, 1)
for i,v in pairs(t) do
table.insert(t2, v)
end
print('t',table.concat(t,', '))
print('t2',table.concat(t2,', '))
t={}
table.insert(t, t2[1] + t2[2])
table.remove(t2, 1)
table.remove(t2, 1)
for i,v in pairs(t2) do
table.insert(t, v)
end
print('t',table.concat(t,', '))
print('t2',table.concat(t2,', '))
end
print(t[1])
Вероятно, для небольшой проблемы это не будет иметь значения, но в целом создание и копирование массивов в цикле является плохим стилем и приводит к снижению производительности.(Попробуйте заменить t = {1,2,3,4,5}
на t={}; for i=1,1e4+1 do t[i]=i; end
).Особенно, если вы не используете большинство элементов в копии большую часть времени.Кроме того, приведенный выше код работает, только если #t
нечетно.
Попробуйте подумать об альтернативных способах, которые не включают создание новых таблиц или перемещения большого хвоста массива.По крайней мере, посмотрите руководство по очередям , которые, вероятно, являются более сложным приемом, чем тот, который необходим.