如何拆分包含子表的Lua表

如何拆分包含子表的Lua表,lua,lua-table,Lua,Lua Table,如何在不更改原始表的情况下将包含几个子表的Lua表拆分为两个表 e、 g。 将tbl={{tbl1}、{tbl2}、{tbl3}、{tbl4}拆分为subtbl1={{tbl1}、{tbl2},subtbl2={tbl3}、{tbl4},同时保持tbl不变 字符串有String.sub,但不知道表中是否有类似的内容。我认为unpack不适用于我的案例,也不适用于table。删除将更改原始tbl 为我的真实案例添加更多信息: tbl在运行时被子表填满,子表的数量也会改变。我想保留前两个子表,并将其

如何在不更改原始表的情况下将包含几个子表的Lua表拆分为两个表

e、 g。 将
tbl={{tbl1}、{tbl2}、{tbl3}、{tbl4}
拆分为
subtbl1={{tbl1}、{tbl2}
subtbl2={tbl3}、{tbl4}
,同时保持
tbl
不变

字符串有
String.sub
,但不知道表中是否有类似的内容。我认为
unpack
不适用于我的案例,也不适用于
table。删除
将更改原始
tbl

为我的真实案例添加更多信息:

tbl
在运行时被子表填满,子表的数量也会改变。我想保留前两个子表,并将其余子表(在一个表中)传递给函数。

尝试以下操作:

subtbl1 = { tbl[1], tbl[2] }
subtbl2 = { tbl[3], tbl[4] }

可以使用lhf建议的方法保留前两个子表。然后,您可以
解压剩余的子表

local unpack = table.unpack or unpack

local t = { {1}, {2}, {3}, {4}, {5}, {6} }

local t1 = { t[1], t[2] }    -- keep the first two subtables
local t2 = { unpack(t, 3) }  -- unpack the rest into a new table

-- check that t has been split into two sub-tables leaving the original unchanged
assert(#t == 6, 't has been modified')

-- t1 contains the first two sub-tables of t
assert(#t1 == 2, 'invalid table1 length')
assert(t[1] == t1[1], 'table1 mismatch at index 1')
assert(t[2] == t1[2], 'table1 mismatch at index 2')

-- t2 contains the remaining sub-tables in t
assert(#t2 == 4, 'invalid table2 length')
assert(t[3] == t2[1], 'table2 mismatch at index 1')
assert(t[4] == t2[2], 'table2 mismatch at index 2')
assert(t[5] == t2[3], 'table2 mismatch at index 3')
assert(t[6] == t2[4], 'table2 mismatch at index 4')

谢谢,但我的案子更复杂。我拥有的真实案例是,原始tbl在运行时被子表填满。目标是将除前2个子表以外的其他子表传递给函数,前2个子表用于其他地方,因此原始表填充后不需要修改。第二个函数需要一个表表表(从索引1开始)?是否希望
tbl
仅包含前两个子表?是的,第二个函数需要一个从索引1开始的表表。但前两个子表不需要作为一个表。我只需要从前两个子表中检索信息。
unpack
支持开始和结束索引的参数,不需要
select
。只需
unpack(t,3)
@EtanReisner谢谢您的反馈。我已经更新了我的答案,加入了你们的建议。谢谢你们!{unpack(t,3)}非常适合我的情况。