【问题标题】:Setting hash value (fractions) in ruby and sorting在 ruby​​ 中设置哈希值(分数)和排序
【发布时间】:2017-05-12 22:11:54
【问题描述】:

我收到以下哈希:

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} 进行排序?

【问题讨论】:

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


    【解决方案1】:

    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 只是后来才得到它们,所以它需要一个显式注释(r suffix) 来区分有理字面量,而不仅仅是整数除法;否则你会破坏现有的程序。

    【讨论】:

    • 如果我正在定义哈希,我会这样做 (.to_r) 或 r,但我收到了哈希,当我尝试排序时,我完全错了。
    • Jorg,我从来没有用 Smaltalk 或 Scheme 编写过代码。我在尝试解决 Codewars 的一个问题时遇到了麻烦。
    【解决方案2】:

    这样定义:

    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)}
    

    【讨论】:

      猜你喜欢
      • 2017-03-24
      • 1970-01-01
      • 2021-02-05
      • 2019-04-30
      • 1970-01-01
      • 2011-01-28
      • 2011-10-25
      • 2011-05-19
      • 2018-11-15
      相关资源
      最近更新 更多