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初学者,真心求教! 展开
现在要
1、按a中数字的出现次数进行排序,次数多的排在前面,如果次数一样,就按a中先出现的在前。
2、然后再按以下格式输出(数字 : 出现次数):7 : 3
之前也在百度知道上面问过一次了,也感谢网友的解答。不过当时没有把问题说清楚,现在再发一次问题,希望高手解答。
本人是lua初学者,真心求教! 展开
1个回答
展开全部
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
]]
-- 每个数出现的次数
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
]]
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询