lua是否有类似python的切片

时间:2014-07-18 08:58:47

标签: lua

就像在python中我可以使用切片。喜欢以下

b=[1,2,3,4,5]
a=b[0:3]

我可以在没有循环的情况下在Lua中进行这种操作。 Or Loop是最有效的方法

3 个答案:

答案 0 :(得分:13)

在Lua 5.2之前使用table.unpackunpack)的结果创建新表格:

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中测试过。)

答案 1 :(得分:9)

这样做没有语法糖,所以你最好的选择是通过一个函数来实现:

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])

请记住,我还没有测试过这个功能,但是如果没有检查输入,它或多或少应该是这样的。

修改:I ran it at ideone

答案 2 :(得分:2)

xlua包有table.splice函数。 (luarocks安装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