按相反顺序对数组进行排序

时间:2014-03-25 15:31:34

标签: ruby arrays sorting

我正在查看组合比较运算符背后的逻辑,它能够反转数组的排序顺序。例如,我可以颠倒以下数组的顺序:

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

添加以下代码:

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

我的问题是,为什么我不能打电话:

books.reverse!

在这个数组上得到相反的顺序?

1 个答案:

答案 0 :(得分:7)

reverse只是颠倒了数组的顺序,并没有对它进行排序:

irb> arr = [3,1,5]
=> [3, 1, 5]

irb> arr.sort
=> [1, 3, 5]
irb> arr.sort {|x,y| y<=>x}
=> [5, 3, 1]
irb> arr.reverse
=> [5, 1, 3]

但是当然你可以将sortreverse组合起来以相反的顺序排序:

irb> arr.sort.reverse
=> [5, 3, 1]