【问题标题】:lua table sorting datalua表排序数据
【发布时间】:2021-07-30 17:27:36
【问题描述】:

我有一个由 lua 代码生成并作为回调返回给客户端的表,但是数据没有排序,我想返回一个按 id 排序的列表

    local players = {}
    for k, player in ipairs(QBCore.Functions.GetPlayers()) do
        local charinfo = QBCore.Functions.GetPlayer(player).PlayerData.charinfo
        local csn = QBCore.Functions.GetPlayer(player).PlayerData.citizenid
        local playerjob = QBCore.Functions.GetPlayer(player).PlayerData.job.label
        local ped = GetPlayerPed(player)
        local playerCoords = GetEntityCoords(ped)
        
        players[k] = {
            ["id"] = player,
            ["name"] = tostring(GetPlayerName(player)),
            ["charName"] = ("%s %s"):format(charinfo.firstname, charinfo.lastname),
            ["csn"] = csn,
            ["playerjob"] = playerjob,
            ["serverid"] = player,
            ["ped"] = GetPlayerPed(player),
            ["coords"] = playerCoords,
        }
    end
    cb(players)

【问题讨论】:

  • 哈希表没有顺序,您需要创建一个包含键的单独结构来定义您要检索项目的顺序。
  • @Nifim - OP 创建一个数组,而不是字典。
  • 啊我现在明白这个问题了,谢谢@EgorSkriptunoff

标签: sorting lua


【解决方案1】:

您可以使用table.sort 订购您的players 餐桌。这将使用您提供的函数来就地对表格进行排序以确定顺序。

table.sortProgramming in Lua: 19.3 – Sort中也有解释

以下是基于您的问题的示例:

players =
{
    {id = 3217},
    {id = 6716},
    {id = 3432},
    {id = 5575},
    {id = 6124},
    {id = 1156},
    {id = 1789},
}

table.sort(players, function(p1,p2) return p1.id < p2.id end)

for k, v in ipairs(players) do
  print(k, v.id)
end

输出:

1   1156
2   1789
3   3217
4   3432
5   5575
6   6124
7   6716

【讨论】:

  • 非常感谢它完美地工作,我是多么愚蠢xD我试图在服务器端应用解决方案,所以回调是有序的,但现在我将它应用到客户端并且它工作了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 2011-10-07
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多