t = {} t['uu'] = 20; t['aa'] = 55; t['sss'] = 100; t['tt'] = 888; function iterr(t,f) local a = {} for n in pairs(t) do a[#a+1] = n end table.sort(a,f) local i = 0 return function() i = i + 1 return a[i],t[a[i]] end end function pairsByKays(t,f) return iterr(t,f),t,nil end com = function(a,b) --降序,重写<的比较方法 if a > b then return true elseif a < b then return false end return false --相等时要返回false end for k,v in pairsByKays(t,com) do print(k,v) end
因为table的sort只是对值进行排序的,默认是升序排序,可以使用一个方法重写<去改成降序排序,注意相等的情况要返回false
要对table的key值排序就需要做一个辅助的迭代器,将key复制到一个新table中进行排序,然后返回原来的数据就好了。
sort方法,只对key值是连续的table有效,1,2,3...的那种