【问题标题】: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。如果您学习了非常基础的知识,您可以自己想出一个解决方案或至少一半的解决方案。所以请阅读手册。

标签: lua lua-table


【解决方案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)}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多