以科学记数法对数字数组进行排序
Posted
技术标签:
【中文标题】以科学记数法对数字数组进行排序【英文标题】:Sort array of numbers in Scientific Notation 【发布时间】:2015-11-26 12:05:19 【问题描述】:我想对一组数字(以科学计数法)从小到大进行排序。
这是我尝试过的(徒劳的):
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"]
【问题讨论】:
【参考方案1】: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"]
【讨论】:
很好的文章来解释更多。 brandon.dimcheff.com/2009/11/18/rubys-sort-vs-sort-by.html 或者s.sort_by(&BigDecimal.method(:new))
,如果你喜欢无点风格。【参考方案2】:
另一种选择是在sort
中使用BigDecimal#<=>
:
s.sort |x, y| BigDecimal(x) <=> BigDecimal(y)
#=> ["0", "1.3e-116", "1.8e-101", "1.5e-5"]
【讨论】:
以上是关于以科学记数法对数字数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章