我只是想了解Ruby排序函数和块,我想出了以下代码:
a = [1,2,3]
a.sort do |x,y|
x
end
不会将返回的x
作为对两个元素进行排序的因素吗?我期待以下行为:
1,2
作为块参数传递,返回1
。2,3
作为块参数传递,返回2
。 1,3
作为块参数传递,返回3
。因此,考虑到返回的值,排序的数组是否仍然是[1,2,3]
?我在哪里弄错了?
答案 0 :(得分:7)
阻止needs to return -1
,0
或1
。我不相信对值传递的顺序有任何保证。由于您没有使用返回值来表示合同,因此结果是未定义的。
实际上,我认为正在发生的是你总是返回一个正值,所以第二个(在数组中的后面)值总是向前移动。但同样,根据文档,这并不能保证。
这或多或少与您的描述相似:
a = [1,2,3]
a.sort do |x,y|
x <=> y
end