Ruby 排序和排序方式之间的细微差别

Ruby 排序和排序方式之间的细微差别,ruby,sorting,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] [1,2,3]。按{x,y{x y}对u进行排序 => [1, 2, 3] [1,2,3].按{| x,y | y x}对u进行排序 => [1, 2, 3] 这是怎么回事?我本来希望数组彼此相对(因为它们具有排序和相同的参数)。\s

这不是一个骗人的问题:

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

[1,2,3].sort_by { |x, y| y <=> x }
=> [1, 2, 3] 
[1,2,3]。按{x,y{x y}对u进行排序
=> [1, 2, 3] 
[1,2,3].按{| x,y | y x}对u进行排序
=> [1, 2, 3] 
这是怎么回事?我本来希望数组彼此相对(因为它们具有排序和相同的参数)。

\sort\u 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,3,2].按{x{x}排序"U |使用xy排序
=> [1, 2, 3]
[1,3,2].按{x,y{x y}对u进行排序#使用nil-nil进行排序
=> [1, 3, 2]
[1,3,2]。按{x}排序
=> [1, 2, 3] 
[1,3,2].按{x}-x}对u进行排序
=> [3, 2, 1] 
[1,3,2]。排序
=> [1, 2, 3] 
[1,3,2].sort.reverse
=> [3, 2, 1] 
[1,3,2].排序{x,y{x y}
=> [1, 2, 3] 
[1,3,2].排序{x,y{yx}
=> [3, 2, 1] 

看看:你肯定会在这里找到答案。为便于将来参考,请查阅ruby文档,您一定会在此处找到答案:)我阅读了文档;只是没有注意到
sort
sort\u by
之间的区别。但我总是很感激被告知RTFM。这就是StackOverflow.doc链接更新的精神:Duh…我的意思是将块传递给
排序
,而不是
排序依据
——它不会发出噪音,而是执行各种不寻常的操作,尤其是在对对象进行排序时(就像我在实际代码中那样)。你的答案是正确的(也是第一个),但我选择了@looby's,因为他指出
y=nil
[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]