在ruby和排序中设置哈希值(分数)

时间:2017-05-12 22:11:55

标签: ruby sorting fractions rational-number ruby-hash

我收到以下哈希:

my_hash = {a:(1/20), b:(1/26)}

但是当我看到哈希时,我得到以下内容:

irb(main):019:0> my_hash = {a:(1/20), b:(1/26)}
=> {:a=>0, :b=>0}
irb(main):020:0> my_hash
=> {:a=>0, :b=>0}

如您所见,它转换为整数(0)

我如何离开Rational,或者浮动以便我可以对my_hash.sort_by {|key, value| value}进行排序?

2 个答案:

答案 0 :(得分:2)

Ruby中Rational文字的语法是<numerator>/<denominator>r,例如1/2r23/42r。你所拥有的只是整数除法:1除以200

my_hash = { a: 1/20r, b: 1/26r }
#=> { :a => (1/20), :b => (1/26) }

看起来你可能是一个Smalltalk或Scheme程序员,但在这些语言中情况有所不同:他们从一开始就有理性文字,Ruby只是稍后得到它们,所以它需要一个明确的注释({{1 (后缀)告诉理性文字除了整数除法之外;否则你会破坏现有的程序。

答案 1 :(得分:1)

如此定义:

my_hash = {a:(1.0/20.0), b:(1.0/26.0)}

或者:

my_hash = {a:(1.to_f/20.to_f), b:(1.to_f/26.to_f)}