gpt4 book ai didi

lua - 在Lua中,如何在不复制的情况下获取数组的尾部?

转载 作者:行者123 更新时间:2023-12-03 18:18:00 26 4
gpt4 key购买 nike

我正在使用 Lua 5.2,为了这个问题,假设这些表专门用作数组。

这是一个返回数组尾部的函数(数组减去它的第一个元素):

function tail(t)

if # t <= 1 then
return nil
end

local newtable = {}
for i, v in ipairs(t) do
if i > 1 then
table.insert(newtable, v)
end
end

return newtable
end

例如:

prompt> table.concat(tail({10, 23, 8}), ", ")

23, 8



然而,这是通过返回表的新副本来实现的。有没有办法避免创建新表?

我正在寻找等效于 C 的返回指向下一个元素的指针( t++ )。是否可以?

最佳答案

如前所述,这通常是不可能的。

但是,使用元表,您可以实现 tail通过引用原始表,无需复制所有数据即可执行所需操作的函数。以下适用于 Lua 5.2 中的大多数操作,但例如不适用于 table.concat :

function tail(t)
return setmetatable({}, {
__index = function(_, k) return t[k+1] end,
__newindex = function(_, k, v) t[k+1] = v end,
__len = function(_) return #t-1 end,
__ipairs = function(_) return
function(_, i)
if i+1==#t then return nil end
return i+1, t[i+2] end,
t, 0 end,
__pairs = function(t) return ipairs(t) end,
})
end

关于lua - 在Lua中,如何在不复制的情况下获取数组的尾部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12372788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com