Я нашел этот вопрос, потому что RuboCop предупредил о моем использовании gsub - я думаю, что приведенные ниже ответы хорошо объясняют ответ, в чем, по сути, разница между gsub и tr.
JohnK
Ответы:
180
Используйте, trесли вы хотите заменить (перевести) отдельные символы.
trсоответствует одиночным символам (не через регулярное выражение), поэтому символы не обязательно должны встречаться в том же порядке в первом строковом аргументе. Когда символ найден, он заменяется символом, который находится по тому же индексу во втором строковом аргументе:
Немного контекста: название trозначает «переводить», как в «переводить символы», что и делает. Он назван в честь одноименной утилиты Unix (которая хорошо известна своими непонятными и короткими именами).
Martin Tournoij
40
trможет заменять только один символ одним фиксированным символом (хотя вы можете поместить несколько совпадений этого типа в один trвызов), но быстро.
gsubможет сопоставлять сложные шаблоны с помощью регулярного выражения и заменять сложным результатом вычисления, но медленнее, чем tr.
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
Ответы:
Используйте,
tr
если вы хотите заменить (перевести) отдельные символы.tr
соответствует одиночным символам (не через регулярное выражение), поэтому символы не обязательно должны встречаться в том же порядке в первом строковом аргументе. Когда символ найден, он заменяется символом, который находится по тому же индексу во втором строковом аргументе:Используйте,
gsub
когда вам нужно использовать регулярное выражение или если вы хотите заменить более длинные подстроки:источник
tr
означает «переводить», как в «переводить символы», что и делает. Он назван в честь одноименной утилиты Unix (которая хорошо известна своими непонятными и короткими именами).tr
может заменять только один символ одним фиксированным символом (хотя вы можете поместить несколько совпадений этого типа в одинtr
вызов), но быстро.gsub
может сопоставлять сложные шаблоны с помощью регулярного выражения и заменять сложным результатом вычисления, но медленнее, чемtr
.источник
tr
в несколько раз быстрееgsub
. Вот пример того, насколько быстрымtr
может быть чемgsub
. github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…tr
возвращает копию,str
в которой символы вfrom_str
заменены соответствующими символами вto_str
. Еслиto_str
он короче чемfrom_str
, он дополняется последним символом для сохранения соответствия. http://apidock.com/ruby/String/trgsub
возвращает копиюstr
со всеми вхождениями шаблона, замененными вторым аргументом. Шаблон обычно представляет собой Regexp; если задано как String, любые содержащиеся в нем метасимволы регулярного выражения будут интерпретироваться буквально, например,\d
будут соответствовать обратному знаку, за которым следуетd
, вместо цифры. http://apidock.com/ruby/String/gsubисточник