ruby按多维数组中的第3个元素排序不正常

时间:2010-05-19 16:59:44

标签: ruby sorting multidimensional-array

我正在使用ruby对数组进行排序,其中数组中的每个元素都是另一个数组。

我有这个:

Data = Data.SortBy { |Info| info[3] }

此列中的示例数据:

3.1
2
5.65
-1
0.4
-9.43
-10.87
-2.3

它应该将其排序为:

5.65
3.1
2
0.4
-1
-2.3
-9.43
-10.87

但它是这样的:

5.65
3.1
2
0.4
-1
-10.87
-2.3
-9.43

它只是比较浮动的第一个字符...而不是整数?

2 个答案:

答案 0 :(得分:1)

看起来它按字母顺序排序而不是数字排序,这就是为什么“1”出现在“10”之前。

我假设信息中的数据是字符串。如果是这样,您可以将它们转换为数值浮点数以进行排序操作:

data = data.sort_by{|info| info[3].to_f}

答案 1 :(得分:0)

正确的方法是:

array.sort_by {|elt| ary = elt.split("-").map(&:to_i); ary[0] + ary[1]}

简单来说,您就可以理解您的代码

array = [1,2,4,5,9]

array.sort do |a, b|
  b <=> a
end
# => [9,5,4,2,1]