【问题标题】:How to sum ordinal values of letters in strings/keys of a hash, then sum all the keys?如何对哈希的字符串/键中字母的序数值求和,然后对所有键求和?
【发布时间】:2017-01-05 21:26:20
【问题描述】:

我有这个哈希:

games = { "Mario" => "SNES", "Ico" => "PS2", "Tetris" => "Gameboy" }

我想创建一个方法,将键转换为整数,然后将哈希中的所有键相加并返回一个整数

我在 ruby​​docs 上查找了一些方法,发现了字符串方法ord,它将字母转换为它们的数值。 我知道我会想split('') 密钥我只是不知道如何让它全部工作。

编辑 对困惑感到抱歉。我正在寻找的是将键拆分为单个字母/字符,将它们与ord 转换为它们的数字序数,将所有数字加在一起并返回总和。

【问题讨论】:

    标签: ruby hash sum iteration


    【解决方案1】:

    这将满足您的要求:

    games.keys.join.chars.map { |c| c.ord }.inject(:+) #=> 1422
    

    故障...

    games.keys
      #=> ["Mario", "Ico", "Tetris"]
    games.keys.join
      #=> "MarioIcoTetris"     
    games.keys.join.chars
      #=> ["M", "a", "r", "i", "o", "I", "c", "o", "T", "e", "t", "r", "i", "s"]
    games.keys.join.chars.map { |c| c.ord }
      #=> [77, 97, 114, 105, 111, 73, 99, 111, 84, 101, 116, 114, 105, 115] 
    games.keys.join.chars.map { |c| c.ord }.inject(:+)
      #=> 1422
    

    更好...

    如果你想变得更漂亮,你也可以写:

    games.keys.join.chars.map(&:ord).inject(:+) #=> 1422
    

    只是为了好玩...

    这是另一种方式,我们在 String 类中定义一个方法,然后将该方法应用于每个键,然后将所有键的序数和相加:

    class String
      def sumord
        chars.map(&:ord).inject(:+) 
      end
    end
    
    games.keys.map(&:sumord).inject(:+) #=> 1422
    

    【讨论】:

      【解决方案2】:

      string.sum 也应该可以工作!

      这个解决方案看起来更好

      【讨论】:

        猜你喜欢
        • 2016-12-30
        • 2016-04-08
        • 2014-04-23
        • 1970-01-01
        • 1970-01-01
        • 2022-12-24
        • 2021-07-04
        • 2016-04-27
        • 2011-05-26
        相关资源
        最近更新 更多