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...的那种