lua的table排序问题

2025-05-05 09:19:47
推荐回答(2个)
回答1:

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

回答2:

用视图来排序: DataView dv = dt.