2016-11-06 55 views
1

排序我有一個表t與許多條目像t["name1"] = 42t["name2"] = 123...的Lua遍歷表的值

我想遍歷表中的降值號的順序。這如何實現?我發現了創建迭代器函數的方法,這些函數通過表的進行排序,但沒有辦法查看具有有序值的條目。

回答

1
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