ruby的排序方法是怎么回事?

djb*_*djb 10 ruby

"a"和"b"在以下代码中表示什么,以及如何<=>工作?

list = [1,2,3,4,5]
list.sort { |a,b| b <=> a }

#=> [5,4,3,2,1]
Run Code Online (Sandbox Code Playgroud)

Emi*_*ily 11

ab表示一对项目.它可以是原始列表中的任意两个.在<=>通常被称为飞船操作.如果两个项相等则返回0,如果左边的那个较小则返回-1,如果右边的那个较小则返回1.

关于Ruby API文档中的太空飞船运营商的更多信息.这是Fixnum上的那个文档,因为那是你的例子中的内容,但你也可以查看Float,String等的定义.

更新:sort函数期望它给出的块遵循与太空船操作符相同的行为.如果第一个参数a应该先排序,则应该返回-1; 如果第二个参数b应该先排序,则应返回1; 等等.因此,在list.sort { |a,b| a + b }您告诉排序第二个参数每次都更大的示例中,因为a + b该列表中的每个可能组合都大于1.所以你得到[5,3,1,4,2]的东西基本上是元素传递给块的顺序的工件,并且可能在Ruby实现中不稳定.

  • 通常?我第一次听到它叫做"宇宙飞船运营商"; P (3认同)
  • 查看http://en.wikipedia.org/wiki/Spaceship_operator以及Ryan对该问题的评论中的"可能重复"链接. (2认同)