用科学记数法排序数字数组

时间:2015-11-26 12:05:20

标签: ruby sorting scientific-notation

我想从最小到最高排序一系列数字(科学记数法)。

这是我尝试过的(徒劳):

require 'bigdecimal'
s = ['1.8e-101','1.3e-116', '0', '1.5e-5']
s.sort { |n| BigDecimal.new(n) }.reverse

# Results Obtained
# => [ "1.3e-116", "1.8e-101", "0", "1.5e-5" ]

# Expected Results
# => [ "0", "1.3e-116", "1.8e-101", "1.5e-5"]

2 个答案:

答案 0 :(得分:11)

预计Enumerable#sort块会返回-101。你想要的是Enumerable#sort_by

s.sort_by { |n| BigDecimal.new(n) }
# => ["0", "1.3e-116", "1.8e-101", "1.5e-5"]

答案 1 :(得分:2)

另一种选择是在sort中使用BigDecimal#<=>

s.sort { |x, y| BigDecimal(x) <=> BigDecimal(y) }
#=> ["0", "1.3e-116", "1.8e-101", "1.5e-5"]