这不是一个棘手的问题:
[1,2,3].sort_by { |x, y| x <=> y }
=> [1, 2, 3]
[1,2,3].sort_by { |x, y| y <=> x }
=> [1, 2, 3]
这里发生了什么?我原本期望数组彼此相对(因为它们具有排序和相同的参数)。
答案 0 :(得分:18)
#sort_by
应该只取一个块参数,一个来自数组的项,然后根据块的结果进行排序。
当传递两个块参数时,第二个设置为nil
,因此所有块结果都像1 <=> nil
nil
,因此数组的顺序不变。
[1, 3, 2].sort_by { |x| x } # sorts using x <=> y
=> [1, 2, 3]
[1, 3, 2].sort_by { |x, y| x <=> y } # sorts using nil <=> nil
=> [1, 3, 2]
答案 1 :(得分:6)
[1, 3, 2].sort_by { |x| x }
=> [1, 2, 3]
[1, 3, 2].sort_by { |x| -x }
=> [3, 2, 1]
[1, 3, 2].sort
=> [1, 2, 3]
[1, 3, 2].sort.reverse
=> [3, 2, 1]
[1, 3, 2].sort { |x, y| x <=> y }
=> [1, 2, 3]
[1, 3, 2].sort { |x, y| y <=> x }
=> [3, 2, 1]