Lua排序。排序后奇怪的顺序

时间:2017-09-18 10:02:48

标签: sorting lua

crdsClear={{y=56,x=50,symbolName=3,},
{y=56,x=29,symbolName=2,},
{y=56,x=99,symbolName=2,},
{y=56,x=9,symbolName=5,},
{y=56,x=69,symbolName=5,},
{y=56,x=19,symbolName=4,},
{y=56,x=59,symbolName=4,},
{y=56,x=89,symbolName=4,},
{y=56,x=40,symbolName=7,},
{y=56,x=80,symbolName=6,},}



tmp2={}
ywf = 1
table.sort(crdsClear,
    function(a,b)
        tmp2[ywf]=""
        for i=1, #crdsClear, 1 do tmp2[ywf] = tmp2[ywf].."\t"..crdsClear[i].x     end
        ywf = ywf + 1
        if  a.x <= b.x then print(a.x.." <= "..b.x.." true") else print(a.x.." <= "..b.x.." false") end
        return a.x <= b.x --  a.y <= b.y and
    end
)

-- Create string
order=""
print(#crdsClear)
result = {[1]=""}
for i=1, #crdsClear, 1 do
    order = order..crdsClear[i].x.." "
    result[1] = result[1].. crdsClear[i].symbolName
end
print(order)
print(result[1])

排序后我有.x订单:
9 19 59 29 40 50 69 80 89 99
和字符串:
5442735642个
为什么我的订单不正确?
如果我改变:
    返回a.x&lt; = b.x
于:
    返回a.x&lt; b.x
然后正确订购。

1 个答案:

答案 0 :(得分:4)

来自Lua参考手册:

  

如果给出comp,那么它必须是一个接收两个列表的函数   元素并且当第一个元素必须在之前时返回true   在最后的顺序中排名第二(因此,在排序之后,i&lt; j意味着不是   排版(列表[j]时,列表[1]))。

在此处使用<=会导致无效的排序函数,在某些情况下会调用错误消息和/或排序结果不完整。

改为使用return a.x < b.x