我有这个哈希:
games = { "Mario" => "SNES", "Ico" => "PS2", "Tetris" => "Gameboy" }
我想创建一个方法,将键转换为整数,然后将哈希中的所有键一起添加并返回一个整数
我在rubydocs上查找了一些方法,并遇到了字符串方法ord
,它将字母转换为数字值。
我知道我会想split('')
我只是不知道如何让一切工作。
修改
对困惑感到抱歉。我正在寻找的是将键分成单独的字母/字符,用ord
将它们转换为数字序数,将所有数字加在一起并返回总和。
答案 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
也应该起作用!
此解决方案看起来更好