【问题标题】:How can i use table.insert without it inserting the index?如何在不插入索引的情况下使用 table.insert?
【发布时间】:2020-10-26 18:19:32
【问题描述】:
local t={}
for i,v in pairs(game.Players:GetPlayers()) do
  if v~=game.Players.LocalPlayer then
   table.insert(t,v.Name)
  end
end

如果我做 table.foreach(t,print) 它也会显示索引,当我想选择一个随机播放器时它会导致问题。该错误通常类似于“1 不是工作区的有效成员”

【问题讨论】:

  • 尝试t[#t+1] = v.Name 而不是table.insert

标签: lua


【解决方案1】:

您的问题不是 table.insert 添加了索引,而是您使用它而不是您想要使用的值。

table.insert 向列表中插入一个元素。如果没有给出索引,则将值添加到列表的末尾。

所以没有“插入索引”就没有办法使用table.insert。实际上,在不提供键的情况下根本无法将元素添加到 Lua 表中。 Lua 表不过是一组键值对。

table.foreach 为每个键值对调用一个函数。 你应该使用table.foreachi btw。

所以table.foreachi(t, print) 等价于

print(1, t[1])
print(2, t[2])
...

如果您只想打印值:

for i,v in ipairs(t) do print(v) end

或者对于旧的 Lua 版本

table.foreachi(t, function(i,v) print(v) end)

您也可以运行一个数字 for 循环:

for i = 1, t.n do print(t[i]) end

for i = 1, #t do print(t[i]) end

【讨论】:

    【解决方案2】:

    table.foreach(t,f) 将函数f 应用到t 的每一个键值 对,如is written。此外,从 Lua 5.1 开始,该功能已被弃用。

    如果您只想打印所有值,请执行

    for _, name in ipairs (t) do
        print (name)
    end
    

    print (table.concat (t, ', '))
    

    如果你想要来自t 的随机名称:

    local random_name = t [math.random (#t)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-03
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多