【问题标题】:Order Lua Table in Descending Order (Highest to Lowest)按降序排列 Lua 表(从高到低)
【发布时间】:2018-06-29 04:42:36
【问题描述】:

我已尽一切努力让这个 lua 表按从高到低的顺序排列。我查看了整个网络上的其他 stackoverflow 线程,但它不起作用。

local DTable = {}
local SC = 0
for e,q in pairs(LastATP) do
  local CT = {e,q}
  SC = SC + 1
  table.insert(DTable, SC, CT)
end         

table.sort(DTable, function(a, b) return a[2] < b[2] end)

“E”是一个随机密钥,例如)dxh3qw89fh39fh - 而 q 是一个数字。请帮忙。我什么都试过了。当我尝试遍历排序表时,我还使用“for i,v in ipairs(DTable)” - 请尽快回复!

【问题讨论】:

    标签: lua lua-table


    【解决方案1】:

    table.sort 的比较器就像&lt; 一样——它使用它来排列列表中的值,以便最小的在前,最大的在最后。这看起来像

    第一个

    如果你想颠倒这个顺序,你应该给它一个“&gt;操作”:

    第一 > 第二 > 第三 > .... > 最后

    -- Sort `DTable` by the second value in the pair, decreasing
    table.sort(DTable, function(a, b) return a[2] > b[2] end)
    

    在你的问题中,你说像q 这样的值是数字。如果它们实际上是字符串,但你想将它们排序为数字,你应该使用tonumber 来转换它们:

    -- Note that keeping track of "SC" is not necessary, it is just the
    -- length of DTable, which is where table.insert inserts by default
    table.insert(DTable, {e, tonumber(q)}))
    

    【讨论】:

    • 这并没有解决我的问题,只会让情况变得更糟。唔。这几乎就像 table.sort() 根本没有任何区别。
    • 我和这个问题的其他读者对这个脚本应该完成什么以及正在输入的内容很少有背景。如果您共享我们可以运行的代码,那么提供帮助会更容易。
    • 假设对表格进行排序,设置为:{["key"] = ["points"]} 并将其转换为{["num"] = {"key", "points"}},然后对所述表格进行排序以获得显示分数从最高到最低的排行榜。 @柯蒂斯F
    • @RyanHuellen - 试试local CT = {e,tonumber(q)}
    • 当我这样做时,“q”返回 nil。所以我认为那里一定有某种字符串混合在一起,果然 - 它是点,(其他存储值),我必须创建一个简单的 Split() 函数。感谢您的帮助,@EgorSkriptunoff - 如果您发布一个答案,说明使用 tonumber(q) 检查您的值,我会将其标记为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多