当涉及负整数时,Ruby排序方法很奇怪

时间:2016-07-28 02:10:19

标签: arrays ruby sorting

给出以下字符串:

numbers =  "4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"

我想按数字顺序得到它。这是我正在使用的代码

numbers.split(' ').sort

但是,这将返回以下内容:

["-214", "-3", "-6", "-64", "0", "1", "29", "4", "4", "5", "54", "542", "6"]

为什么sort会以这种方式表现。理想情况下,数组应该有-214作为第一个整数,542作为第二个。我怎样才能做到这一点?

期望的输出:

[“ - 214”,“ - 64”,“ - 6”,“ - 3”,“0”,“1”,“4”,“4”,“5”,“6”,“26 “,”54“,”542“]

2 个答案:

答案 0 :(得分:4)

Ruby的sort默认为对字符串进行操作时,按照字典顺序进行排序,就像在此处所做的那样。如果要按数字顺序排序,则需要执行以下操作:

numbers.split.sort_by(&:to_i)

答案 1 :(得分:0)

这将为你解决问题。

numbers.map {| V | v.to_i} {的.sort | A,B | a< => B}