有人可以解释这个代码如何按升序排序?

时间:2015-04-27 14:05:03

标签: ruby arrays function sorting

它按升序返回数组/列表,但它是如何工作的?

books = ["Charlie and the Chocolate Factory", "War and Peace", "Utopia", "A Brief History of Time", "A Wrinkle in Time"]

books.sort! { |firstBook, secondBook| firstBook <=> secondBook }

2 个答案:

答案 0 :(得分:0)

这是一个很简单的答案。该块调用太空飞船运营商:<=>。许多物体都会对此作出反应它返回-1,0或1,具体取决于一个对象是否为&#34;更大&#34;比另一个。

以下是字符串的工作原理:

  

比较 - 返回-1,0,+ 1或nil,具体取决于字符串是否为   小于,等于或大于other_string。

     

如果字符串长度不同,字符串相等   当比较到最短的长度时,那么较长的字符串就是   被认为大于较短的一个。

如果你的对象没有响应太空船操作员(就像你自己的对象一样),那么你可以自己定义它。

Ruby Docs

答案 1 :(得分:0)

Enumerable#sort uses众所周知的Quicksort算法。

您在块(firstBook <=> secondBook)中提供的比较回调正由ruby默认快速排序实现调用。