如何拆分包含子 table 的 Lua table
How to split a Lua table containing sub-tables
如何在不改变原始 table 的情况下将包含少量子 table 的 Lua table 拆分为两个 table。
例如
将 tbl = {{tbl1}, {tbl2}, {tbl3}, {tbl4}}
拆分为 subtbl1 = {{tbl1}, {tbl2}}
、subtbl2 = {{tbl3}, {tbl4}}
,同时保持 tbl
不变。
String 有 string.sub
,但不知道 table 是否有类似的东西。我不认为 unpack
适合我的情况,table.remove
也会改变原来的 tbl
。
为我的真实案例添加更多信息:
tbl
在运行时被sub-table填满,sub-table的数量发生变化。我想保留前 2 个 sub-tables 并将其余的 sub-tables(在一个 table 中)传递给函数。
试试这个:
subtbl1 = { tbl[1], tbl[2] }
subtbl2 = { tbl[3], tbl[4] }
您可以使用 lhf 建议的方法保留前两个子表。然后您可以 unpack
剩余的子表。
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')
如何在不改变原始 table 的情况下将包含少量子 table 的 Lua table 拆分为两个 table。
例如
将 tbl = {{tbl1}, {tbl2}, {tbl3}, {tbl4}}
拆分为 subtbl1 = {{tbl1}, {tbl2}}
、subtbl2 = {{tbl3}, {tbl4}}
,同时保持 tbl
不变。
String 有 string.sub
,但不知道 table 是否有类似的东西。我不认为 unpack
适合我的情况,table.remove
也会改变原来的 tbl
。
为我的真实案例添加更多信息:
tbl
在运行时被sub-table填满,sub-table的数量发生变化。我想保留前 2 个 sub-tables 并将其余的 sub-tables(在一个 table 中)传递给函数。
试试这个:
subtbl1 = { tbl[1], tbl[2] }
subtbl2 = { tbl[3], tbl[4] }
您可以使用 lhf 建议的方法保留前两个子表。然后您可以 unpack
剩余的子表。
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')