1

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

a = [1,2,3]
a.sort do |x,y|
  x
end

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

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

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

4

1 回答 1

7

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

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

这或多或少像您的描述:

a = [1,2,3]
a.sort do |x,y|
  x <=> y
end
于 2012-08-06T06:12:08.780 回答