这不是一个技巧问题:
[1,2,3].sort_by { |x,y| x <=> y } => [1,3] [1,y| y <=> x } => [1,3]
这里发生了什么?我原本期望数组彼此相对(因为它们具有排序和相同的参数).
解决方法
#sort_by应该只取一个块参数,一个来自数组的项,并根据块的结果进行排序.
当将两个块参数传递给它时,第二个被设置为nil,因此所有块结果都是1< =>. nil为nil,因此数组的顺序不变.
[1,3,2].sort_by { |x| x } # sorts using x <=> y => [1,3] [1,2].sort_by { |x,y| x <=> y } # sorts using nil <=> nil => [1,2]