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
trcuando desee reemplazar (traducir) caracteres individuales.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:Úselo
gsubcuando necesite usar una expresión regular o cuando desee reemplazar subcadenas más largas:fuente
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).trsolo puede reemplazar un solo carácter con un solo carácter fijo (aunque puede poner múltiples coincidencias de este tipo en una solatrllamada) 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 quetr.fuente
tres varias veces más rápido quegsub. Aquí hay un punto de referencia sobre qué tan rápidotrpodría sergsub. github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…trdevuelve una copia destrcon los caracteres enfrom_strreemplazados por los caracteres correspondientes ento_str. Sito_stres más corto quefrom_str, se rellena con su último carácter para mantener la correspondencia. http://apidock.com/ruby/String/trgsubdevuelve una copia destrcon 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