lua的table排序问题
lua吧
全部回复
仅看楼主
level 2
hundreddu 楼主
a={7,8,9,7,8,9,7,7,9,6,5,2,2,1}
b={}
for i=1,#a do
b[a[i]] = (b[a[i]] or 0)+1
end
table.sort(b,function(item1,item2) return item1>item2 end)
for k,v in pairs(b) do
print(k..":"..v.."\n")
end
我是想按a中数值出现次数进行降序排序,那个table.sort,我试过写成
table.sort(b,function(item1,item2) return b[item1]>b[item2] end)
输出都不正确。
2015年01月18日 16点01分 1
level 13
b不是数组,是个hash表,所以不能sort,同样也不能用ipair。解决的方法是再引入一个新的表来记录,其本身是个数组,里面记录b的序号和值,然后对这个表来排序。
a={7,8,9,7,8,9,7,7,9,6,5,2,2,1}
b={}
for i=1,#a do
b[a[i]] = (b[a[i]] or 0)+1
end
c={}
for k,v in pairs(b) do
table.insert(c, {num = k, count = v})
end
table.sort(c,function(item1,item2) return item1.count>item2.count end)
for i,v in ipairs(c) do
print(i..": num = "..v.num..", count = ".. v.count.."\n")
end
-----------------------------
结果:
1: num = 7, count = 4
2: num = 9, count = 3
3: num = 2, count = 2
4: num = 8, count = 2
5: num = 6, count = 1
6: num = 1, count = 1
7: num = 5, count = 1
2015年01月28日 14点01分 3
1