Algorithm 按Lua中的嵌套值对表进行排序
我有一个程序,它为每个用户聚合总下载次数,并以kb为单位聚合总下载数据Algorithm 按Lua中的嵌套值对表进行排序,algorithm,sorting,data-structures,lua,lua-table,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][
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