lua中table的排序问题

a={7,7,4,7,8,,6,3,,4,4,3,6,5,1,9}现在要1、按a中数字的出现次数进行排序,次数多的排在前面,如果次数一样,就按a中先出现的在前。2、然后再... a={7,7,4,7,8,,6,3,,4,4,3,6,5,1,9}

现在要

1、按a中数字的出现次数进行排序,次数多的排在前面,如果次数一样,就按a中先出现的在前。

2、然后再按以下格式输出(数字 : 出现次数):7 : 3

之前也在百度知道上面问过一次了,也感谢网友的解答。不过当时没有把问题说清楚,现在再发一次问题,希望高手解答。

本人是lua初学者,真心求教!
展开
 我来答
iicup
2015-02-04 · TA获得超过890个赞
知道小有建树答主
回答量:597
采纳率:85%
帮助的人:177万
展开全部
a={7,7,4,7,8,6,3,4,4,3,6,5,1,9}

-- 每个数出现的次数
b={}

-- 每个数出现的位置
p= {}

for i=1,#a do
b[a[i]] = (b[a[i]] or 0)+1
p[a[i]] = (p[a[i]]) or i
end

--把统计结果做成数组
c = {}
n = 0
for k,v in pairs(b) do
n = n + 1
c[n] = {k,v}
end

cmp = function(x,y)
if x==nil then return true end;
if y==nil then return false end;
-- 次数大在前, 次数一样, 位置在前的在前
return ((x[2] > y[2]) or ((x[2] == y[2]) and (p[x[1]] < p[y[1]])) )
end

table.sort(c, cmp)

for i=1, #c do
print(c[i][1]..":"..c[i][2]);
end

--[[ 运行结果

7:3
4:3
6:2
3:2
8:1
5:1
1:1
9:1

]]
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式