sort和sort_by之间的细微差别

Chr*_*s B 9 ruby sorting

这不是一个技巧问题:

[1,2,3].sort_by { |x, y| x <=> y }
=> [1, 2, 3] 

[1,2,3].sort_by { |x, y| y <=> x }
=> [1, 2, 3] 
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?我原本期望数组彼此相反(因为它们具有排序和相同的参数).

rob*_*oby 19

#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]
Run Code Online (Sandbox Code Playgroud)


Ian*_*ney 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] 
Run Code Online (Sandbox Code Playgroud)