algorithm - 按 Lua 中的嵌套值对表进行排序

标签 algorithm sorting data-structures lua lua-table

<分区>

我有一个程序可以为每个用户汇总执行的下载总数以及以 kb 为单位的总下载数据的总和。

local table = {}
table[userID] = {5, 23498502}

我的目标是 printTable 函数的输出将生成按下载的 kb 数量降序排列的整个用户列表 v[2]

local aUsers = {}

...

function topUsers(key, nDownloads, totalSize)
    if aUsers[key] then
        aUsers[key][1] = aUsers[key][1] + nDownloads
        aUsers[key][2] = aUsers[key][2] + totalSize
    else
        aUsers[key] = {nDownloads, totalSize}
    end
end

function printTable(t)
    local str = ""

    -- How to sort 't' so that it prints in v[2] descending order?

    for k,v in pairs(t) do 
        str = str .. k .. ", " .. v[1] .. ", " .. v[2] .. "\n"
    end

    return str
end

...

我该怎么做?

最佳答案

您可以将键放入一个单独的表中,然后使用您需要的标准对该表进行排序:

local t = {
  a = {1,2},
  b = {2,3},
  c = {4,1},
  d = {9,9},
}
local keys = {}
for k in pairs(t) do table.insert(keys, k) end
table.sort(keys, function(a, b) return t[a][2] > t[b][2] end)
for _, k in ipairs(keys) do print(k, t[k][1], t[k][2]) end

将打印:

d   9   9
b   2   3
a   1   2
c   4   1

关于algorithm - 按 Lua 中的嵌套值对表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21890961/

相关文章:

java - 按第一列排序二维数组,然后按第二列排序

python - python中根据文件名对文件进行排序

c - 结构元素值在执行期间被覆盖

java - 如何在 Java 中对多重映射进行排序?

javascript - 递归查找数组中的元素

algorithm - 一组坐标形成的矩形面积之和

algorithm - shell排序分析

algorithm - 给定二叉树中的垂直和

arrays - 数组跳到带权重的末尾算法?

algorithm - 图数据结构 - 它们在现实世界的应用程序中是如何表示的?