Lua有像Python的切片一样的东西吗?

就像在 Python 中一样,我可以使用切片。就像下面这样

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

我能不能在 Lua 中做这种操作而不需要循环。或者循环是最有效的方法。

点赞
用户2698261
用户2698261

这种操作没有语法糖,所以最好的方法是通过函数实现:

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运行了它

2014-07-18 10:56:15
用户758473
用户758473

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

2017-08-04 16:53:03
用户3316267
用户3316267

通过使用 table.unpack 的结果创建一个新的表格(在 Lua 5.2 之前使用 unpack ):

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

2018-01-09 03:52:07