Я бы сделал следующее:
VOWELS = %w[a e i o u]
NEXT_VOWELS = VOWELS.zip(VOWELS.rotate).to_h
# => {"a"=>"e", "e"=>"i", "i"=>"o", "o"=>"u", "u"=>"a"}
'jived fox nymph grabs quick waltz'.gsub(
Regexp.union(VOWELS), # => /a|e|i|o|u/
NEXT_VOWELS
)
# => "jovid fux nymph grebs qaock weltz"
Маг c возникает при построении ха sh с использованием to_h
из гласных и их повернутых значений с использованием rotate
и zip
, и используя Regexp.union
, чтобы gsub
мог искать любые совпадения, и передавая ha sh в gsub
, который он будет использовать для замены найденных совпадений.
Использование tr
, как упомянул Макс, очень быстро и отлично подходит для преобразований одиночных символов . Использование gsub
, как мы с Кэри Суовеланд использовали, будет работать для многосимвольных строк, поэтому, если вам нужно заменить подстроки или слова, предложения, шаблоны в шаблонизаторе , тогда это начальная точка.
Примечание: gsub
и правильно написанное регулярное выражение также чрезвычайно быстро . Используйте плохо написанное регулярное выражение, и ваш код будет замедляться.