在Lua中按降序对表进行排序

4

我无法让它工作:

tbl = {
    [1] = { ['etc2'] = 14477 },
    [2] = { ['etc1'] = 1337 },
    [3] = { ['etc3'] = 1336 },
    [4] = { ['etc4'] = 1335 }
}

for i = 1, #tbl do
    table.sort(tbl, function(a, b) return a[i] > b[i] end)
    print(tbl[i] .. '==' .. #tbl)
end

收到错误信息:尝试比较两个空值。这是对Lua中表格值排序的后续操作。

我认为你不想在循环内部对表进行排序。另外,你是如何尝试对其进行排序的?a[i]为空,因为a是一个带有字符串索引的表。 - Omri Barel
欢迎来到 Stack Overflow,Lucas。当您需要澄清问题时,请使用帖子下方的编辑按钮,而不是开新的问题。我会将另外两个问题标记为此问题的重复,因为我认为这个问答最好地解决了问题。 - BMitch
类似问题:https://dev59.com/BXI-5IYBdhLWcg3wCz3y - BMitch
1个回答

8
这个怎么样?
tbl = {
    { 'etc3', 1336 },
    { 'etc2', 14477 },
    { 'etc4', 1335 },
    { 'etc1', 1337 },
}

table.sort(tbl, function(a, b) return a[2] > b[2] end)

for k,v in ipairs(tbl) do
    print(v[1], ' == ', v[2])
end

将数据按照这种方式组织,使排序变得更容易。请注意,我只调用 table.sort 一次,而不是每个表元素都调用一次。我根据子表中第二个值进行排序,这应该是您想要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接