Я читал документацию Ruby и путался с разницей между gsub и tr. В чем разница между двумя?
В чем разница между tr и gsub?
Ответ 1
Используйте tr, когда вы хотите заменить (перевести) одиночные символы.
tr соответствует одиночным символам (не через регулярное выражение), поэтому символы не должны встречаться в том же порядке в первом аргументе строки. Когда символ найден, он заменяется символом, который находится в том же индексе во втором строковом аргументе:
'abcde'.tr('bda', '123')
#=> "31c2e"
'abcde'.tr('bcd', '123')
#=> "a123e"
Используйте gsub, когда вам нужно использовать регулярное выражение или если вы хотите заменить более длинные подстроки:
'abcde'.gsub(/bda/, '123')
#=> "abcde"
'abcde'.gsub(/b.d/, '123')
#=> "a123e"
Ответ 2
-
trможет заменить только один символ одним фиксированным символом (хотя вы можете поместить несколько совпадений этого типа в один вызовtr), но быстро. -
gsubможет соответствовать сложным шаблонам с использованием regex и заменять сложным результатом вычисления, но медленнее, чемtr.
Ответ 3
tr возвращает копию str с символами в from_str, замененными соответствующими символами в to_str. Если to_str короче from_str, он заполняется его последним символом, чтобы поддерживать соответствие.
http://apidock.com/ruby/String/tr
gsub возвращает копию str со всеми вхождениями шаблона, заменяемыми вторым аргументом. Шаблон обычно представляет собой Regexp; если задано как String, любые метасимволы регулярного выражения, которые он содержит, будут интерпретироваться буквально, например. \d будет соответствовать обратному результату, а затем d вместо цифры.
http://apidock.com/ruby/String/gsub