У lua есть что-то вроде кусочка python
Как и в python, я могу использовать срез. Как и после
b=[1,2,3,4,5]
a=b[0:3]
Могу ли я выполнить такую операцию в Lua без цикла. Или Loop - самый эффективный способ сделать это
Ответы
Ответ 1
Для этого нет синтаксического сахара, поэтому лучше всего сделать это с помощью функции:
function table.slice(tbl, first, last, step)
local sliced = {}
for i = first or 1, last or #tbl, step or 1 do
sliced[#sliced+1] = tbl[i]
end
return sliced
end
local a = {1, 2, 3, 4}
local b = table.slice(a, 2, 3)
print(a[1], a[2], a[3], a[4])
print(b[1], b[2], b[3], b[4])
Имейте в виду, что я не тестировал эту функцию, но это более или менее то, как должно выглядеть, не проверяя ввод.
Изменить: Я запустил его на ideone.
Ответ 2
Создавая новую таблицу, используя результат table.unpack
( unpack
до Lua 5.2):
for key, value in pairs({table.unpack({1, 2, 3, 4, 5}, 2, 4)}) do
print(key, value)
end
Это порождает...
1 2
2 3
3 4
(Проверено в Lua 5.3.4 и Lua 5.1.5.)
Ответ 3
пакет xlua имеет функцию table.splice. (luarocks install xlua)
yourTable = {1,2,3,4}
startIndex = 1; length = 3
removed_items, remainder_items = table.splice(yourTable, startIndex, length)
print(removed_items) -- 4
print(remainder_items) -- 1,2,3
см.: https://github.com/torch/xlua/blob/master/init.lua#L640