理解排序方法和ruby中的常规块

nik*_*ik7 1 ruby

我只是想了解Ruby排序函数和块,我想出了以下代码:

a = [1,2,3]
a.sort do |x,y|
  x
end
Run Code Online (Sandbox Code Playgroud)

返回x不会被视为对两个元素进行排序的因素吗?我期待以下行为:

  1. 1,2作为块参数传递,1返回.
  2. 2,3作为块参数传递,2返回.
  3. 1,3作为块参数传递,3返回.

因此,考虑到返回的值,排序的数组是否仍然是[1,2,3]?我哪里弄错了?

Dar*_*tle 7

该块需要返回 -1,01.我不相信对值传递的顺序有任何保证.由于您没有使用返回值来履行合同,因此结果是未定义的.

实际上,我认为正在发生的是你总是返回一个正值,所以第二个(在数组中的后面)值总是向前移动.但同样,根据文档,这并不能保证.

这种行为或多或少与您的描述相似:

a = [1,2,3]
a.sort do |x,y|
  x <=> y
end
Run Code Online (Sandbox Code Playgroud)