【问题标题】:With LUA: How to I remove an item from a table?使用 LUA:如何从表中删除项目?
【发布时间】:2020-08-28 21:01:57
【问题描述】:

我似乎找不到像这样的问题。

我有一个脚本,用于生成玩家名称(用于游戏),它通过在玩家进入游戏时附加文件末尾来正确地将名称存储到文本文件 (players.txt) 中。没有排序。例如:

Player1
Player4
Player3
Player2

如何从文本文件中删除 Player3?

我确实有一个名为 currPlayers 的变量,它是一个从 Players.txt 创建的表,我想稍后使用它。我应该搜索表格并在玩家离开时重写整个文件还是只搜索文件本身?不知道哪个更好。

【问题讨论】:

  • 如果表足够小,在表更改后重写整个文件似乎没问题。但是我有一个问题:为什么这个文件需要存在?如果您在玩家加入时添加它并在他们离开时从其中移除,为什么不只拥有一张桌子?该文件是否在其他地方使用?
  • 其实这个文本文件可能并不一定存在,也许我只是为了测试目的使用它。整个想法是这样的:我正在根据文本文件的内容重命名进入的玩家(在游戏服务器上)。我想避免无意中分配重复的并发玩家名称,但是当玩家离开时,可以返回名称以供其他玩家进入。我的印象是需要一个日志文件,并且可能无法将当前玩家的所有名称保存在一个表中,因为脚本运行然后关闭。这就是我使用文本文件的原因。
  • 如果是这种情况,您可以使用答案中给出的 Joseph Sible 的选项 1。您可以对if players['Name1'] then print("That name's taken") 进行相等性检查以查看是否有人拥有该名称,Sible 会显示如何从列表中删除名称。

标签: lua


【解决方案1】:

您可以通过两种不同的方式让玩家进入牌桌。

选项 1:

players = {Player1 = true, Player4 = true, Player3 = true, Player2 = true}
-- or equivalently
players['Player1'] = true
players['Player4'] = true
players['Player3'] = true
players['Player2'] = true

如果您的表是这样设置的,那么只需执行 players['Player3'] = nil 删除 Player3

选项 2:

players = {'Player1', 'Player4', 'Player3', 'Player2'}
-- or equivalently
players[1] = 'Player1'
players[2] = 'Player4'
players[3] = 'Player3'
players[4] = 'Player2'

如果您的表是这样设置的,则使用ipairs 循环和table.remove 删除Player3,如下所示:

for k,v in ipairs(players) do
    if v == 'Player3' then
        table.remove(players, k)
        break
    end
end

【讨论】:

    猜你喜欢
    • 2021-11-23
    • 2013-07-11
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 2014-03-01
    • 2016-03-12
    • 2021-08-11
    相关资源
    最近更新 更多