Encontré esta pregunta porque RuboCop alertó sobre mi uso de gsub: creo que las respuestas a continuación explican bien la respuesta, que es básicamente la diferencia entre gsub y tr.
trcoincide con caracteres individuales (no a través de una expresión regular), por lo tanto, no es necesario que los caracteres aparezcan en el mismo orden en el primer argumento de cadena. Cuando se encuentra un carácter, se reemplaza con el carácter que se encuentra en el mismo índice en el segundo argumento de cadena:
Un poco de contexto: el nombre trsignifica "traducir", como en "traducir caracteres", que es exactamente lo que hace. Lleva el nombre de la utilidad Unix del mismo nombre (que son bien conocidos por sus nombres oscuros y cortos).
Martin Tournoij
40
trsolo puede reemplazar un solo carácter con un solo carácter fijo (aunque puede poner múltiples coincidencias de este tipo en una sola trllamada) pero es rápido.
gsubpuede combinar patrones complicados usando expresiones regulares y reemplazarlos con un resultado de cálculo complicado, pero es más lento que tr.
trdevuelve una copia de strcon los caracteres en from_strreemplazados por los caracteres correspondientes en to_str. Si to_stres más corto que from_str, se rellena con su último carácter para mantener la correspondencia.
http://apidock.com/ruby/String/tr
gsubdevuelve una copia de strcon todas las apariciones de patrón sustituidas por el segundo argumento. El patrón es típicamente un Regexp; Si se da como una Cadena, cualquier metacaracteres de expresión regular que contenga se interpretará literalmente, por ejemplo \d, coincidirá con una reacción violenta seguida de d, en lugar de un dígito.
http://apidock.com/ruby/String/gsub
Respuestas:
Úselo
tr
cuando desee reemplazar (traducir) caracteres individuales.tr
coincide con caracteres individuales (no a través de una expresión regular), por lo tanto, no es necesario que los caracteres aparezcan en el mismo orden en el primer argumento de cadena. Cuando se encuentra un carácter, se reemplaza con el carácter que se encuentra en el mismo índice en el segundo argumento de cadena:Úselo
gsub
cuando necesite usar una expresión regular o cuando desee reemplazar subcadenas más largas:fuente
tr
significa "traducir", como en "traducir caracteres", que es exactamente lo que hace. Lleva el nombre de la utilidad Unix del mismo nombre (que son bien conocidos por sus nombres oscuros y cortos).tr
solo puede reemplazar un solo carácter con un solo carácter fijo (aunque puede poner múltiples coincidencias de este tipo en una solatr
llamada) pero es rápido.gsub
puede combinar patrones complicados usando expresiones regulares y reemplazarlos con un resultado de cálculo complicado, pero es más lento quetr
.fuente
tr
es varias veces más rápido quegsub
. Aquí hay un punto de referencia sobre qué tan rápidotr
podría sergsub
. github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…tr
devuelve una copia destr
con los caracteres enfrom_str
reemplazados por los caracteres correspondientes ento_str
. Sito_str
es más corto quefrom_str
, se rellena con su último carácter para mantener la correspondencia. http://apidock.com/ruby/String/trgsub
devuelve una copia destr
con todas las apariciones de patrón sustituidas por el segundo argumento. El patrón es típicamente un Regexp; Si se da como una Cadena, cualquier metacaracteres de expresión regular que contenga se interpretará literalmente, por ejemplo\d
, coincidirá con una reacción violenta seguida ded
, en lugar de un dígito. http://apidock.com/ruby/String/gsubfuente