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
用视图来排序: DataView dv = dt.