这里是初级程序员,只是想了解Ruby背后的过程sort
使用飞船操作符时的方法<=>
.希望有人能帮忙。
在以下内容中:
array = [1, 2, 3]
array.sort { |a, b| a <=> b }
...我明白sort
一次比较一对数字,然后返回 -1
如果a
属于b
之前, 0
如果它们相等,或者 1
如果a
应该遵循 b
.
但是在降序排序的情况下,像这样:
array.sort { |a, b| b <=> a }
...到底发生了什么?是否sort
还是比较a <=> b
然后翻转结果?或者它是在解释 return
的 -1
, 0
和 1
具有相反的行为?
换句话说,为什么要像这样将变量放在 block 中:
array.sort { |b, a| b <=> a }
...结果与第一个示例中的排序模式相同?
最佳答案
a <=> b
将返回 -1
如果a
属于b
之前, 0
如果它们相等,或者 1
如果a
应该遵循 b
.
b <=> a
将返回 -1
如果b
属于a
之前, 0
如果它们相等,或者 1
如果b
应该遵循 a
.
由于您要颠倒顺序,因此输出应该颠倒,就像 -
运营商,例如。 3-5
是-2
, 和 5-3
是2
.
array.sort { |b, a| b <=> a }
等于array.sort { |a, b| a <=> b }
因为第一个参数在飞船之前,第二个参数在之后。 Ruby 不关心变量的名称是什么。
关于ruby - Ruby 的排序方法如何与组合比较(宇宙飞船)运算符一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16600251/