如何在Lua中,为表格中的变量分配编号?

将 mvp 表格当前输出翻译为:如果 player1 活着

"player1, player2, player3, player1, player2, player1, player2, player3, player1"

  • 希望得到的 mvp 表格输出, 如果 player1 活着:

    "player1 - 4, player2 - 3, player3 - 2"

我想缩短输出内容。 @Yu Hao,干得好!只是我在解释问题时表达得不好 ): 抱歉我修改了一下问题

点赞
用户1009479
用户1009479

针对修改后的问题,你可以像这样使用 set 存储表格项及其计数:

mvp = {"player1", "player2", "player3", "player1", "player2", "player1", "player2", "player3", "player1"}

local t = {}
for k, v in ipairs(mvp) do
    t[v] = (t[v] or 0) + 1
end
local count = {}
local index = 1
for k, v in pairs(t) do
    count[index] = k .. " - " .. v
    index = index + 1
end

str = table.concat(count, ", ")
print(str)

输出: player1 - 4, player3 - 2, player2 - 3

需要注意的是,由于使用了 pairs(),所以名称没有排序,如果名称需要排序,则需要进行一些额外的工作。

2014-03-12 02:38:11
用户869951
用户869951

尝试这样做: 您可以直接使用 mvpmvpp 表格计算出现次数; 然后使用 string.format 格式化输出,但由于可能有几个玩家,因此您可以使用 table.concat 结合几个玩家的输出; 最后将其放入 ui

function output(scores, x, y)
    local out  = {}
    for player, score in scores do
        table.insert(out, string.format("%s - %s", player, score))
    end
    ui.addTextArea(1,"<a href='event:closee'> ".. table.concat(out, ";") .. " </a>", NIL, 6, x,y, 50,0x1C3C41,0x1C3C41,0.9,true)
end

function eventLoop(time)
    local mvp = {}
    local mvpp = {}

    if time < 120000 then
        for name, player in pairs(tfm.get.room.playerList) do
            if not player.isDead then
                if TeamOne[name] then
                    mvp[name] = (mvp[name] or 0) + 1
                end
                if TeamTwo[name] then
                    mvpp[name] = (mvpp[name] or 0) + 1
                end
            end
        end
    end
    -- 现在例如 mvp = {player1 = 200, player3 = 50}
    output(mvp,    6, 308)
    output(mvpp, 406, 208)
end

实际上 output() 还有几个参数需要传递(例如传递给 addTextArea() 的第一个参数和 href 名称),但是您已经大致了解了。

2014-03-12 05:17:44