在Lua中连接表序列

3
有没有一种简单的方法可以连接两个序列类型的表格?例如:
a = {1, 2, 3}
b = {5, 6, 7}
c = cat(a,b)

在哪个表 {1,2,3,5,6,7} 中,c 所指的位置?


2
尝试查看这个这个 - Robin Gertenbach
2
问题表述得非常准确和优秀。不幸的是,它是一些质量较差的问题的重复。 - Tom Blodget
1个回答

3
function cat(t, ...)  
    local new = {unpack(t)}  
    for i,v in ipairs({...}) do  
        for ii,vv in ipairs(v) do  
            new[#new+1] = vv  
        end  
    end  
    return new  
end

它使用迭代方法将每个数组的元素添加到一个新数组中。

值得注意的是,{unpack(t)}只在元素数量少于特定数量时才起作用,这是由于Lua中元组的工作方式不同。这取决于版本和你正在做什么,但如果很小,你可能无需担心。


你在第一行缺少了一个空格,这就是代码块无法工作的原因 ;) 记住:四个空格才能形成一个代码块 :) - Henrik Ilgen
请注意,{unpack(t)}仅适用于多达一百万个表元素(如果您有16位的int,则为15000)。 - siffiejoe
@siffie 我上次检查的时候是8K... - warspyking
@Henrik 真不敢相信我居然错过了那个。谢谢 :D - warspyking
@warspyking,Lua 5.1 大约需要 8K 的空间。在我的测试案例中,Lua 5.2 和 5.3 都可以处理 999970 个元素(取决于你已经使用了多少堆栈空间)。 - siffiejoe
@siffiejoe 噢,我主要使用Lua 5.1,所以我认为它是8K。 - warspyking

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接