Je lisais la documentation de Ruby et je gsub
confondu avec la différence entre gsub
et tr
. Quelle est la différence entre les deux?
Utilisez 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 ne doivent pas nécessairement apparaître dans le même ordre dans le premier argument. Lorsqu’un caractère est trouvé, il est remplacé par le caractère trouvé au même index dans le second argument:
'abcde'.tr('bda', '123') #=> "31c2e" 'abcde'.tr('bcd', '123') #=> "a123e"
Utilisez gsub
lorsque vous devez utiliser une expression régulière ou lorsque vous souhaitez remplacer des sous-chaînes plus longues:
'abcde'.gsub(/bda/, '123') #=> "abcde" 'abcde'.gsub(/bd/, '123') #=> "a123e"
tr
ne peut remplacer qu’un seul caractère avec un seul caractère fixe (bien que vous puissiez placer plusieurs correspondances de ce type dans un seul appel) mais est rapide. gsub
peut correspondre à des motifs compliqués en utilisant regex, et remplacer par un résultat de calcul compliqué, mais est plus lent que tr
. tr
renvoie une copie de str
avec les caractères de from_str
remplacés par les caractères correspondants dans to_str
. Si to_str
est plus court que from_str
, il est from_str
avec son dernier caractère afin de maintenir la correspondance. http://apidock.com/ruby/Ssortingng/tr
gsub
renvoie une copie de str
avec toutes les occurrences du motif substitué au second argument. Le modèle est généralement un Regexp; Si elle est donnée en tant que chaîne, les métacaractères d’une expression régulière qu’elle contient seront interprétés littéralement, par exemple \d
correspondra à un retour en arrière suivi d’un d
au lieu d’un chiffre. http://apidock.com/ruby/Ssortingng/gsub