Если вам нужно выполнить много преобразований, возможно, стоит включить в эталонный тест различных методов следующее:
h = (0..9).each_with_object({}) { |n,h| h[n.to_s] = (4*n).to_s }
#=> {"0"=>"0", "1"=>"4", "2"=>"8", "3"=>"12", "4"=>"16",
# "5"=>"20", "6"=>"24", "7"=>"28", "8"=>"32", "9"=>"36"}
Затем для каждой интересующей строки будет выполнен следующий расчет:
"C3H12O4".gsub(/\d/, h)
#=> "C12H48O16"
"99Ra$32".gsub(/\d/, h)
#=> "3636Ra$128"
Используется форма String # gsub , в которой для подстановок используется га sh.
Вариант этого следующий.
"C3H12O4".gsub(/./) { |c| h.fetch(c, c) }
#=> "C12H48O16"
Здесь gsub
соответствует каждому символу, который он передает блоку, который должен храниться в переменной блока c
. Hash # fetch затем используется для поиска и возврата h[c]
, при условии, что h
имеет ключ c
. Если h
не имеет ключа c
, возвращается второй аргумент fetch
(c
).
Использование ha sh избавляет от необходимости конвертировать туда и обратно между целыми числами и строками, за исключением случаев создания ha sh, конечно, но это делается только один раз.