Ruby的排序方法如何与组合比较(太空船)运算符一起使用?

ver*_*idd 6 ruby sorting comparison-operators

在这里开始编程,只是想sort在使用太空船操作员时理解Ruby 方法背后的过程<=>.希望有人能提供帮助.

在下面的:

array = [1, 2, 3]
array.sort { |a, b| a <=> b }
Run Code Online (Sandbox Code Playgroud)

......据我所知,sort在时间比较一对数,然后再返回-1,如果a前所属b,0如果他们是平等的,或者1如果a应该遵循b.

但是在按降序排序的情况下,如下所示:

array.sort { |a, b| b <=> a }
Run Code Online (Sandbox Code Playgroud)

......究竟发生了什么?是否sort仍比较a <=> b,然后翻转,结果呢?或者是解释return-1,01具有相反的行为吗?

换句话说,为什么要将变量放在块中,如下所示:

array.sort { |b, a| b <=> a }
Run Code Online (Sandbox Code Playgroud)

...导致与第一个例子中相同的排序模式?

Doo*_*nob 4

a <=> b-1如果a属于 before b0如果它们相等,或者1如果a应该 follow ,则将返回b。如果属于 before ,如果它们相等,或者是否应该遵循,
b <=> a将返回-1ba01ba

由于要颠倒顺序,因此输出也应该颠倒,就像-运算符一样。3-5-2,并且5-32

array.sort { |b, a| b <=> a }等于,array.sort { |a, b| a <=> b }因为第一个参数在飞船之前,第二个参数在飞船之后。Ruby 不关心变量的名称是什么。