J'ai trouvé cette question parce que RuboCop m'a alerté sur mon utilisation de gsub - je pense que les réponses ci-dessous expliquent bien la réponse, qui est essentiellement la différence entre gsub et tr.
JohnK
Réponses:
180
À utiliser trlorsque vous souhaitez remplacer (traduire) des caractères uniques.
trcorrespond à des caractères uniques (pas via une expression régulière), par conséquent, les caractères n'ont pas besoin de se présenter dans le même ordre dans le premier argument de chaîne. Lorsqu'un caractère est trouvé, il est remplacé par le caractère qui se trouve au même index dans le deuxième argument de chaîne:
Un peu de contexte: le nom trsignifie "traduire", comme dans "traduire les caractères", ce qui est exactement ce qu'il fait. Il porte le nom de l'utilitaire Unix du même nom (qui est bien connu pour ses noms obscurs et courts).
Martin Tournoij
40
trne peut remplacer qu'un seul caractère par un seul caractère fixe (bien que vous puissiez mettre plusieurs correspondances de ce type en un seul trappel) mais est rapide.
gsubpeut correspondre à des modèles compliqués à l'aide de regex et remplacer par un résultat de calcul compliqué, mais est plus lent que tr.
trrenvoie une copie de stravec les caractères dans from_strremplacés par les caractères correspondants dans to_str. Si to_strest plus court que from_str, il est complété avec son dernier caractère afin de maintenir la correspondance.
http://apidock.com/ruby/String/tr
gsubrenvoie une copie de stravec toutes les occurrences de pattern substituées au second argument. Le modèle est généralement une expression rationnelle; s'il est donné sous forme de chaîne, tout méta-caractère d'expression régulière qu'il contient sera interprété littéralement, par exemple \dcorrespondra à un jeu suivi de d, au lieu d'un chiffre.
http://apidock.com/ruby/String/gsub
Réponses:
À utiliser
tr
lorsque vous souhaitez remplacer (traduire) des caractères uniques.tr
correspond à des caractères uniques (pas via une expression régulière), par conséquent, les caractères n'ont pas besoin de se présenter dans le même ordre dans le premier argument de chaîne. Lorsqu'un caractère est trouvé, il est remplacé par le caractère qui se trouve au même index dans le deuxième argument de chaîne:À utiliser
gsub
lorsque vous devez utiliser une expression régulière ou lorsque vous souhaitez remplacer des sous-chaînes plus longues:la source
tr
signifie "traduire", comme dans "traduire les caractères", ce qui est exactement ce qu'il fait. Il porte le nom de l'utilitaire Unix du même nom (qui est bien connu pour ses noms obscurs et courts).tr
ne peut remplacer qu'un seul caractère par un seul caractère fixe (bien que vous puissiez mettre plusieurs correspondances de ce type en un seultr
appel) mais est rapide.gsub
peut correspondre à des modèles compliqués à l'aide de regex et remplacer par un résultat de calcul compliqué, mais est plus lent quetr
.la source
tr
sont plusieurs fois plus rapides quegsub
. Voici un point de repère sur la vitesse à laquelletr
pourrait êtregsub
. github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…tr
renvoie une copie destr
avec les caractères dansfrom_str
remplacés par les caractères correspondants dansto_str
. Sito_str
est plus court quefrom_str
, il est complété avec son dernier caractère afin de maintenir la correspondance. http://apidock.com/ruby/String/trgsub
renvoie une copie destr
avec toutes les occurrences de pattern substituées au second argument. Le modèle est généralement une expression rationnelle; s'il est donné sous forme de chaîne, tout méta-caractère d'expression régulière qu'il contient sera interprété littéralement, par exemple\d
correspondra à un jeu suivi ded
, au lieu d'un chiffre. http://apidock.com/ruby/String/gsubla source