如何排序数组?

时间:2016-03-28 05:28:15

标签: haxe

我有一系列要点:

var pointsCutAt:Array<Point>

我需要根据y访问权对数组进行排序,我的实现是:

ArraySort.sort(pointsCutAt,function(a, b):Int{
                        if (a.y > b.y)
                        return 1;
                        else
                        if (a.y < b.y)
                        return -1
                        else
                        return 0;
                    });

但是,我注意到传递的数组没有被排序:

在:

[(x=360, y=90),(x=360, y=270),(x=360, y=180),(x=360, y=360)]

后:

[(x=360, y=90),(x=360, y=270),(x=360, y=180),(x=360, y=360)]

在haxe documentation

static sort<T> (a:Array<T>, cmp:T ‑> T ‑> Int):Void
     

此操作会修改Array a。

所以,我错过了什么?

修改

我发现错误与sort函数无关,var isHorizo​​ntal是完全错误的,所以当我期待y时,我正在对x进行排序:

        if (pointsCutAt.length > 0)
        {
            // sort them first!
            if (isHorizontal)
            {
                ArraySort.sort(pointsCutAt,function(a, b):Int{
                    if (a.x > b.x)
                    return 1;
                    else
                    if (a.x < b.x)
                    return -1
                    else
                    return 0;
                });
            }else
            {
                ArraySort.sort(pointsCutAt,function(a, b):Int{
                    if (a.y > b.y)
                    return 1;
                    else
                    if (a.y < b.y)
                    return -1
                    else
                    return 0;
                });
            }

我发现当我尝试准备一个最小的样本时......感谢任何方式..

我没有使用Array.sort的原因是在docs中写的:

  

排序操作不能保证稳定,这意味着   可能不保留相等元素的顺序。对于稳定的阵列   排序算法,可以使用haxe.ds.ArraySort.sort()代替。

0 个答案:

没有答案