Estaba leyendo la documentación de Ruby y me confundí con la diferencia entre gsuby tr. ¿Cuál es la diferencia entre los dos?
Estaba leyendo la documentación de Ruby y me confundí con la diferencia entre gsuby tr. ¿Cuál es la diferencia entre los dos?
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:
'abcde'.tr('bda', '123')
#=> "31c2e"
'abcde'.tr('bcd', '123')
#=> "a123e"
Úselo gsubcuando necesite usar una expresión regular o cuando desee reemplazar subcadenas más largas:
'abcde'.gsub(/bda/, '123')
#=> "abcde"
'abcde'.gsub(/b.d/, '123')
#=> "a123e"
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 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.tres varias veces más rápido que gsub. Aquí hay un punto de referencia sobre qué tan rápido trpodría ser gsub. github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
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