table 排序sort,对table的key排序输出
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...的那种


首页 我的博客
粤ICP备17103704号