Ruby 如何用哈希值替换字符串中的字母

Ruby 如何用哈希值替换字符串中的字母,ruby,Ruby,我想从一个单词中提取一些字母,并用它们的化学符号替换这些字母 这行得通,但太长了。我相信有一种方法可以缩短时间: puts "Enter your name" name = gets.chomp if name.include? 'br' name.gsub!('br', 'Br') end if name.include? 'ba' name.gsub!('ba', 'Ba') end if name.include? 'cr' name.gsub!('cr', 'Cr') en

我想从一个单词中提取一些字母,并用它们的化学符号替换这些字母

这行得通,但太长了。我相信有一种方法可以缩短时间:

puts "Enter your name"
name = gets.chomp

if name.include? 'br'
  name.gsub!('br', 'Br')
end
if name.include? 'ba'
  name.gsub!('ba', 'Ba')
end
if name.include? 'cr'
  name.gsub!('cr', 'Cr')
end

if name.include? 'ac'
  name.gsub!('ac', 'Ac')
end

if name.include? 'al'
  name.gsub!('al', 'Al')
end

if name.include? 'am'
  name.gsub!('am', 'Am')
end
我试着这样做,但没有用。怎么了

puts "Enter your name"
name = gets.chomp

     symbols = {
     :ac => "Ac",
     :al => "Al",
     :am => "Am",
     :br => "Br",
     :ba => "Ba",
     :cr => "Cr"
    }


if name.include? symbols
  symbols.each{ |key, value| name.gsub!(key, value) }
end

puts name
我得到以下错误:

breakingbad.rb:15:in `include?': no implicit conversion of Hash into String (TypeError)
        from breakingbad.rb:15:in `<main>'
breakingbad.rb:15:in'include':没有将哈希隐式转换为字符串(TypeError)
来自breakingbad.rb:15:in`'
使用字符串作为散列键。也接受散列作为第二个参数

如果第二个参数是散列,并且匹配的文本是其 键,相应的值是替换字符串

使用字符串作为散列键。也接受散列作为第二个参数

如果第二个参数是散列,并且匹配的文本是其 键,相应的值是替换字符串


这很好用,但我不太理解这一行
name.gsub!(/#{symbols.keys.join(“|”)}/,symbols)
你能解释一下吗?那是一个正则表达式,相当于
/(ac | al | am | br | ba | cr)/
。如果在符号上调用
,则代码也应有效<代码>符号。每个{key,value{name.gsub!(key.to,value)}。如果name.include也
?符号
错误。include方法需要一个字符串参数。需要一个小补丁:
'am'=>“am”
您最好使用
Regexp.union(symbols.keys)
,这样您就不必对
symbol.keys
字符串的内容进行假设。这很好用,但我并不真正理解这一行
name.gsub!(/#{symbols.keys.join(“|”)}/,symbols)
你能解释一下吗?那是一个正则表达式,相当于
/(ac | al | am | br | ba | cr)/
。如果在符号上调用
,则代码也应有效<代码>符号。每个{key,value{name.gsub!(key.to,value)}。如果name.include也
?符号
错误。include方法需要一个字符串参数。需要一个微小的修复:
'am'=>“am”
您最好使用
Regexp.union(symbols.keys)
,这样您就不必对
symbol.keys
字符串的内容进行假设。
symbols = {
  'ac' => "Ac",
  'al' => "Al",
  'am' => "Al",
  'br' => "Br",
  'ba' => "Ba",
  'cr' => "Cr"
}
puts "Enter your name"
name = gets.chomp
name.gsub!(/#{symbols.keys.join('|')}/, symbols)
puts name