我有一系列要点:
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 isHorizontal是完全错误的,所以当我期待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()代替。