如何分割包含子表的Lua表

如何将包含几个子表的 Lua 表分成两个表而不改变原始表。

例如。 将 tbl = {{tbl1}, {tbl2}, {tbl3}, {tbl4}} 分成 subtbl1 = {{tbl1}, {tbl2}}subtbl2 = {{tbl3}, {tbl4}},同时保持 tbl 不变。

字符串有 string.sub,但不知道表是否有类似的东西。我不认为 unpack 对我的情况有用,而且 table.remove 会改变原始的 tbl

为我的实际情况添加更多信息:

在运行时,tbl 被子表填满,并且子表的数量会发生变化。我想保留前两个子表以便于后续操作,将其余子表(在一个表中)传递给一个函数。

点赞
用户107090
用户107090

尝试一下:

subtbl1 = {tbl[1],tbl[2]}
subtbl2 = {tbl[3],tbl[4]}
2015-01-09 16:54:50
用户415823
用户415823

你可以使用lhf建议的方法保留前两个子表。然后你可以unpack剩余的子表。

local unpack = table.unpack or unpack

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

local t1 = { t[1], t[2] }    -- 保留前两个子表
local t2 = { unpack(t, 3) }  -- 将剩余的子表拆开并存为新的表

-- 检验t是否被分成两个子表且原始值未改变
assert(#t == 6, 't已被修改')

-- t1 包含了t的前两个子表
assert(#t1 == 2, '无效表1长度')
assert(t[1] == t1[1], '表1的索引1不匹配')
assert(t[2] == t1[2], '表1的索引2不匹配')

-- t2 包含了t中剩余的子表
assert(#t2 == 4, '无效表2长度')
assert(t[3] == t2[1], '表2的索引1不匹配')
assert(t[4] == t2[2], '表2的索引2不匹配')
assert(t[5] == t2[3], '表2的索引3不匹配')
assert(t[6] == t2[4], '表2的索引4不匹配')
2015-01-09 17:35:50