我正在查看组合比较运算符背后的逻辑,它能够反转数组的排序顺序。例如,我可以颠倒以下数组的顺序:
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!
在这个数组上得到相反的顺序?
答案 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]
但是当然你可以将sort
和reverse
组合起来以相反的顺序排序:
irb> arr.sort.reverse
=> [5, 3, 1]