如何在Ruby中对浮点数数组进行排序?

5

我想知道如何在 Ruby 中对浮点数数组进行排序,因为"sort"和"sort!"只适用于整数数组。


4
两种方法对于浮点数或混合浮点数和整数都能正常工作。你确定没有其他问题吗? - steenslag
1
也许你应该展示一下出现问题的代码。 - the Tin Man
3个回答

7

浮点数数组当然可以进行排序:

>> [6.2, 5.8, 1.1, 4.9, 13.4].sort
 => [1.1, 4.9, 5.8, 6.2, 13.4] 

也许你的数组中有一个nil,这个值无法与任何东西排序。

3
谢谢。我遇到了一个NaN,这就是为什么会出现以下错误信息的原因:在 `sort' 中比较浮点数时失败(ArgumentError)。 - reectrix

4

您可以轻松地对浮点数数组进行排序,例如:

irb(main):005:0> b = [2.0, 3.0, 1.0, 4.0]
=> [2.0, 3.0, 1.0, 4.0]
irb(main):006:0> b.sort
=> [1.0, 2.0, 3.0, 4.0]

4
也许你的数组中有类似这样的内容,但你没有注意到:
[1.0 , 3.0, 0/0, ...]

当你使用0/0时,会得到一个NaN,这是无法与浮点数进行比较的...在这种情况下,你应该尝试

[2.3,nil,1].compact.sort
# => [1,2.3]

可能是由于 1.0/0 而出现的无穷大错误(但 Ruby 可以检测到此类错误)。


但是也许建议在这个主题上增加一些更多的说明(我花了一段时间才意识到它)。 - juanm55
很高兴看到你发表了这个答案。这正是我遇到的问题,其他答案没有很好地说明发生了什么。 - Ben Lee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接