lua的table排序问题

a={7,8,9,7,8,9,7,7,9,6,5,2,2,1}b={}fori=1,#adob[a[i]]=(b[a[i]]or0)+1endtable.sort(b)f... 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)

for k,v in pairs(b) do
print(k..":"..v.."\n")
end

我这里想根据table b 的value值(table a数值的出现个数)进行排序,然后输出,但是结果却不行,问题出在哪里呢?
我是想按a中数值出现次数进行降序排序,那个table.sort(b),我试过写成
table.sort(b,function(item1,item2) return item1>item2 end)
table.sort(b,function(item1,item2) return b[item1]>b[item2] end)

输出都不正确。

求解答。
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励20(财富值+成长值)
iicup
推荐于2018-03-26 · TA获得超过890个赞
知道小有建树答主
回答量:597
采纳率:85%
帮助的人:175万
展开全部
table.sort的功能是把
{300,100,200}排序成 {100, 200, 300}
也就是把
{[1]=300, [2]=100, [3]=200} 排序成 {[1]=100, [2]=200. [3]=300}
但是你的b确是
{[1]=1, [2]=2, [5]=1, [6]=1, [7]=4, [8]=2, [9]=3}

这样 [3]=nil, [4]=nil
当sort遇到[3]=nil就认为数组结束了, 就出错了,
你必须给 [3]=0, [4]=0才行,
即是这样, 排序后数据就变了,
你这里不是对一个数排序, 是对一对数排序,
修改如下:

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 = {}
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 (x[1] < y[1])) )
end

table.sort(c, cmp)

for i=1, #c do
print(c[i][1]..":"..c[i][2].."\n");
end
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
descrfwy
2015-01-19 · 超过10用户采纳过TA的回答
知道答主
回答量:228
采纳率:0%
帮助的人:35.7万
展开全部
用视图来排序: DataView dv = dt.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式