删除表格后如何将所有表格向下移动?
Posted
技术标签:
【中文标题】删除表格后如何将所有表格向下移动?【英文标题】:How can I shift all of the tables down after removing a table? 【发布时间】:2022-01-20 17:48:45 【问题描述】:在这段代码中:
t =
num = '',
t[0].num = '0'
t[1].num = '1'
t[2].num = '2'
有没有办法让我删除t[0]
,然后将表的所有值向下移动,这样后记就变成了这样:
t[0].num = '1'
t[1].num = '2'
虚函数示例:
t =
num = '',
t[0].num = '0'
t[1].num = '1'
t[2].num = '2'
for i=0,tableLength(t) do
print(t[i])
end
--Output: 012
remove(t[0])
for i=0,tableLength(t) do
print(t[i])
end
--Output: 12
【问题讨论】:
您的代码没有运行,因为 t[0] 为 nil。 您确定需要索引从 0 开始吗? Lua 的语义和标准库假定数组从索引 1 开始。如果您可以使数组基于 1,则可以使用table.remove(t, 1)
我对你最后一个问题lua.org/manual/5.4/manual.html#pdf-table.remove 的回复应该让你参考Lua 参考手册。 lua.org/manual/5.4/manual.html#pdf-table.remove 你不是通过从其他人那里获得 sn-ps 来学习 Lua。如果您学习了非常基础的知识,您可以自己想出一个解决方案或至少一半的解决方案。所以请阅读手册。
【参考方案1】:
t =
num = '',
t[0].num = '0'
t[1].num = '1'
t[2].num = '2'
此代码将导致索引 t[0]
时出错,一个 nil 值。
t
只有一个字段,即t.num
你需要做这样的事情:
t =
for i = 0, 2 do
t[i] = num = tostring(i)
end
如果您想创建所需的演示表。
由于 Lua 中有许多有用的函数假设基于 1 的索引,我建议您从索引 1 开始。
local t = 1,2,3,4,5
选项 1:
table.remove(t, 1)
选项 2:
t = table.unpack(t, 2, #t)
选项 3:
t = table.move(t, 2, #t, 1, t)
t[#t] = nil
选项 4:
for i = 1, #t-1 do
t[i] = t[i+1]
end
t[#t] = nil
还有更多选择。我不会一一列举。有些是在原地完成的,有些会产生新的表对象。
【讨论】:
谢谢,选项 1 完美。我的 Game Jam 只剩下 24 多小时了,祝我好运!【参考方案2】:如this answer 中所述,通过使用table.unpack 的结果创建一个新表:
t = table.unpack(t, 1, #t)
【讨论】:
以上是关于删除表格后如何将所有表格向下移动?的主要内容,如果未能解决你的问题,请参考以下文章