按字典顺序排序

Jak*_*ior 5 ruby sorting

所以我想按字典顺序对坐标数组进行排序。但是我不确定该怎么做。数组中的每个元素都是一个Coordinate对象,具有Fixnum字段#x#y

我是Ruby的新手,不一定了解排序​​枚举。会是这样吗?

coordinate_array.sort! { |a,b| a.x <==> b.x && a.y <==> b.y }
Run Code Online (Sandbox Code Playgroud)

Fre*_*ung 5

首先,飞船操作员<=>不是<==>

其次,您没有正确组合这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)

哪个更清晰,但内存配置文件稍有不同。这将创建一个数组,其原始值将替换为该块返回的值,并使用该数组对原始数组进行排序。

除非有充分的理由,否则我通常会使用后者。