Stavo leggendo la documentazione di Ruby e mi sono confuso con la differenza tra gsube tr. Qual è la differenza tra i due?
Stavo leggendo la documentazione di Ruby e mi sono confuso con la differenza tra gsube tr. Qual è la differenza tra i due?
Risposte:
Utilizzare trquando si desidera sostituire (tradurre) singoli caratteri.
trcorrisponde a singoli caratteri (non tramite un'espressione regolare), pertanto i caratteri non devono trovarsi nello stesso ordine nel primo argomento stringa. Quando viene trovato un carattere, viene sostituito con il carattere che si trova nello stesso indice nel secondo argomento stringa:
'abcde'.tr('bda', '123')
#=> "31c2e"
'abcde'.tr('bcd', '123')
#=> "a123e"
Utilizzare gsubquando è necessario utilizzare un'espressione regolare o quando si desidera sostituire sottostringhe più lunghe:
'abcde'.gsub(/bda/, '123')
#=> "abcde"
'abcde'.gsub(/b.d/, '123')
#=> "a123e"
trsignifica "tradurre", come in "tradurre i caratteri", che è esattamente quello che fa. Prende il nome dall'utilità Unix con lo stesso nome (che sono ben noti per i loro nomi oscuri e abbreviati).
trpuò sostituire solo un singolo carattere con un singolo carattere fisso (sebbene sia possibile inserire più corrispondenze di questo tipo in una sola trchiamata) ma è veloce.gsubpuò abbinare schemi complicati usando regex e sostituirlo con un risultato di calcolo complicato, ma è più lento di tr.trsono più volte più veloci di gsub. Ecco un punto di riferimento su quanto trpotrebbe essere veloce gsub. github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
trrestituisce una copia di strcon i caratteri in from_strsostituiti dai caratteri corrispondenti in to_str. Se to_strè più corto di from_str, è imbottito con il suo ultimo carattere per mantenere la corrispondenza.
http://apidock.com/ruby/String/tr
gsubrestituisce una copia di strcon tutte le occorrenze del modello sostituito per il secondo argomento. Il modello è in genere un Regexp; se indicato come stringa, qualsiasi metacarattere di espressione regolare che contiene verrà interpretato letteralmente, ad es. \dcorrisponderà a un gioco seguito da d, anziché da una cifra.
http://apidock.com/ruby/String/gsub