ruby - Ruby 的排序方法如何与组合比较(宇宙飞船)运算符一起工作?

标签 ruby sorting comparison-operators

这里是初级程序员,只是想了解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 , 01具有相反的行为?

换句话说,为什么要像这样将变量放在 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-32 .

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

关于ruby - Ruby 的排序方法如何与组合比较(宇宙飞船)运算符一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16600251/

相关文章:

c# - ulong 和 long 之间不可能的比较突然成为可能

ruby-on-rails - 在 `lambda' : tried to create Proc object without a block (ArgumentError)

ruby - 数据映射器 : one-to-many relationship with custom name?

javascript - 这是编写这种非数字/字母排序的最佳方式吗?

javascript 使用 .filter() 返回新的唯一元素数组

php - 为什么 === 在 PHP 中比 == 快?

ruby-on-rails - 尝试在 self.up 中创建记录时,Rails 迁移会出错

ruby-on-rails - `name' :String 的未定义方法 "SystemTimer"

java - Java中如何对重复数字进行排序?

c++ - 奇怪的 std::sort 行为