所以我想按字典顺序对坐标数组进行排序。但是我不确定该怎么做。数组中的每个元素都是一个Coordinate对象,具有Fixnum字段#x和#y。
我是Ruby的新手,不一定了解排序枚举。会是这样吗?
coordinate_array.sort! { |a,b| a.x <==> b.x && a.y <==> b.y }
Run Code Online (Sandbox Code Playgroud)
首先,飞船操作员<=>不是<==>
其次,您没有正确组合这2个比较:比较的结果将是-1,0或1。这些都是真实值,并且true && foo是just foo,因此您的代码只会按y值排序
你可以这样写
x_ordering = a.x <=> b.x
x_ordering == 0 ? a.y <=> b.y : x_ordering
Run Code Online (Sandbox Code Playgroud)
但是数组已经实现了,<=>所以你可以做
array.sort! { |a,b| [a.x, a.y] <=> [b.x, b.y]}
Run Code Online (Sandbox Code Playgroud)
在每次比较中创建2个数组的代价是有点麻烦和清晰
你甚至可以做
array.sort_by! { |a| [a.x, a.y] }
Run Code Online (Sandbox Code Playgroud)
哪个更清晰,但内存配置文件稍有不同。这将创建一个数组,其原始值将替换为该块返回的值,并使用该数组对原始数组进行排序。
除非有充分的理由,否则我通常会使用后者。