【发布时间】:2022-01-15 20:34:24
【问题描述】:
如果我有 (例如) 一个包含 300 个条目的表,我将如何仅获取最新的 x 个条目? 我正在考虑做下一个,但我想知道是否有更好/更优化的方法来做这件事。
local TestTable = {}
-- Populate table
for i = 1, 300, 1 do
print('Adding: ' .. i)
table.insert(TestTable , i)
end
-- Get latest x of table
function GetLatestFromTable(OriginalTable, Amount)
local TableLength = #OriginalTable
local Retval = {}
for i = 1, Amount, 1 do
if TableLength - i <= 0 then break end -- Dont allow to go under 0
table.insert(Retval, OriginalTable[TableLength - i])
print("Adding to Retval: " .. OriginalTable[TableLength - i] .. ' (Index: ' .. TableLength - i .. ')')
end
return Retval
end
print(#TestTable)
local LatestTable = GetLatestFromTable(TestTable, 10)
print(#LatestTable)
【问题讨论】:
-
您可以将内部 if 移动到循环中,例如
for i = math.max(1, #OriginalTable - Amount + 1), #OriginalTable do。如果您想完全避免复制,可以使用元表来模拟切片,但这似乎有点过头了。 -
好的,我去试试,谢谢!
-
试试
LatestTable = {table.unpack(TestTable,#TestTable-100+1)}。 -
请注意,lhfs 解决方案不适用于很长的表,
table.unpack有限制 -
哦,如果你只想迭代子数组,你可以制作一个自定义迭代器。
标签: lua