如何在哈希的字符串/键中对字母的序数值求和,然后对所有键求和?

时间:2016-08-29 18:50:24

标签: ruby hash sum iteration

我有这个哈希:

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

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

我在rubydocs上查找了一些方法,并遇到了字符串方法ord,它将字母转换为数字值。 我知道我会想split('')我只是不知道如何让一切工作。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

string.sum也应该起作用!

此解决方案看起来更好