gpt4 book ai didi

arrays - 传递 block 时 Array#sort 如何工作?

转载 作者:数据小太阳 更新时间:2023-10-29 06:19:22 25 4
gpt4 key购买 nike

我在理解 array.sort{ |x,y| 的方式时遇到问题 block } 工作正常,因此如何使用它?

来自 Ruby documentation 的示例:

   a = [ "d", "a", "e", "c", "b" ]
a.sort #=> ["a", "b", "c", "d", "e"]
a.sort { |x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]

最佳答案

在你的例子中

a.sort

相当于

a.sort { |x, y| x <=> y }

如您所知,要对数组进行排序,您需要能够比较其元素(如果您怀疑这一点,只需尝试在不使用任何比较的情况下实现任何排序算法,不是 <><=>= )。

您提供的 block 实际上是一个函数,sort 算法将调用该函数来比较两个项目。 xy 将始终是 sort 算法在执行期间选择的输入数组的一些元素。

sort 算法将假定此比较函数/ block 将满足方法 <=> 的要求:

  • 如果 x < y 则返回 -1
  • 如果 x = y 则返回 0
  • 如果 x > y 则返回 1

未能提供足够的比较函数/ block 将导致数组的顺序未定义。

你现在应该明白为什么了

a.sort { |x, y| x <=> y }

a.sort { |x, y| y <=> x }

以相反的顺序返回相同的数组。


详细说明 Tate Johnson 添加的内容,如果您在任何类上实现比较函数 <=>,您将获得以下内容

  1. 您可以在类中包含模块 Comparable,它将自动为您定义以下方法:between?==>=<<=>
  2. 现在可以使用对 sort 的默认(即不带参数)调用对您的类的实例进行排序。

请注意,在 ruby​​ 的标准库(<=>BignumArrayFile::StatFixnumString 等)中任何有意义的地方都已经提供了 Time 方法。

关于arrays - 传递 block 时 Array#sort 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2637419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com