我想从最小到最高排序一系列数字(科学记数法)。
这是我尝试过的(徒劳):
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"]
答案 0 :(得分:11)
预计Enumerable#sort
块会返回-1
,0
或1
。你想要的是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"]