我有一个方法,我想用它来替换字符串中的字符:
def complexity_level_two
replacements = {
'i' => 'eye', 'e' => 'eei',
'a' => 'aya', 'o' => 'oha'}
word = "Cocoa!55"
word_arr = word.split('')
results = []
word_arr.each { |char|
if replacements[char] != nil
results.push(char.to_s.gsub!(replacements[char]))
else
results.push(char)
end
}
end
我想要的字符串输出应该是:Cohacohaaya!55
然而,当我运行这个方法时,它不会替换字符,只输出字符串:
C
o
c
o
a
!
5
5
我做错了什么,使得这个方法不能替换字符串中的正确字符来匹配hash
中的字符?如何修复此问题以获得所需的输出?
4条答案
按热度按时间ufj5ltwl1#
Regexp::union
,String#gsub
与哈希。ndasle7k2#
请参见Hash#default_proc=和Object#tap。
gsub
检查字符串的每个字符。如果replacements
将该字符作为键,则该字符将替换为replacements
中该键的值;else(由于默认的proc),字符被替换为自身(即保持不变)。另一种方法是使用Hash#fetch:
对于Rubyv2.2+(当Object#本身首次亮相时),可以编写
62lalag43#
你可以试着这样做:
=〉“Cohacohaaya!55英寸
busg9geu4#
构造方法
使用 word 和 subs 参数定义方法:
这里我们使用了三元运算符,它本质上是一个更紧凑形式的if-else表达式。要注意的关键方法是
String#chars
,Array#map
,Hash#key?
,有关这些方法的更多信息,请参见ruby-docs。现在设置好了,你可以调用你的方法,传递一个 word 字符串和你选择的 subs 哈希值。示例1
示例二