Lua 迭代排序后的表

我有一个表t,类似于t ["name1"] = 42, t ["name2"] = 123,......`

我想按值数字的降序遍历表。如何实现这一点?我已经找到了创建迭代函数的方法,按表的键有序,但没有方法按排序后的值遍历条目。

点赞
用户1847592
用户1847592
function pairs_order_by_values_desc(tab)
   local keys = {}
   for k in pairs(tab) do
      keys[#keys + 1] = k
   end
   table.sort(keys, function(a, b) return tab[a] > tab[b] end)
   local j = 0
   return
      function()
         j = j + 1
         local k = keys[j]
         if k ~= nil then
            return k, tab[k]
         end
      end
end

local t = {}
t.name1 = 42
t.name2 = 123
t.name3 = 99

for k, v in pairs_order_by_values_desc(t) do
   print(k, v)
end

将表按值降序排序

该函数接收一个表作为输入,返回一个迭代器(iterator)函数。

排序后,迭代器函数每次返回表中一个键值对(key-value pair),以值从大到小的顺序返回。如果两个值相等,则以key为第二个排序标准。

对于输入表:

local t = {}
t.name1 = 42
t.name2 = 123
t.name3 = 99

使用下面的代码迭代输出键值对:

for k, v in pairs_order_by_values_desc(t) do
   print(k, v)
end

输出结果为:

name2  123
name3  99
name1  42
2016-11-06 21:16:30