我正在使用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
它只是比较浮动的第一个字符...而不是整数?
答案 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]