Ich habe diese Frage gefunden, weil RuboCop auf meine Verwendung von gsub aufmerksam gemacht hat. Ich denke, die folgenden Antworten erklären die Antwort gut, was im Grunde den Unterschied zwischen gsub und tr ausmacht.
JohnK
Antworten:
180
Verwenden trSie diese Option, wenn Sie einzelne Zeichen ersetzen (übersetzen) möchten.
trÜbereinstimmungen mit einzelnen Zeichen (nicht über einen regulären Ausdruck), daher müssen die Zeichen im ersten Zeichenfolgenargument nicht in derselben Reihenfolge vorkommen. Wenn ein Zeichen gefunden wird, wird es durch das Zeichen ersetzt, das im zweiten Zeichenfolgenargument am selben Index gefunden wird:
Ein bisschen Kontext: Der Name trbedeutet "übersetzen", wie in "Zeichen übersetzen", was genau das ist, was er tut. Es ist nach dem gleichnamigen Unix-Dienstprogramm benannt (das für seine obskuren und kurzen Namen bekannt ist).
Martin Tournoij
40
trkann nur ein einzelnes Zeichen durch ein einzelnes festes Zeichen ersetzen (obwohl Sie mehrere Übereinstimmungen dieser Art in einem einzigen trAufruf platzieren können), ist aber schnell.
gsubkann komplizierte Muster mit Regex abgleichen und durch ein kompliziertes Berechnungsergebnis ersetzen, ist aber langsamer als tr.
trGibt eine Kopie von zurück, strwobei die Zeichen in from_strdurch die entsprechenden Zeichen in ersetzt werden to_str. Wenn to_stres kürzer als ist from_str, wird es mit seinem letzten Zeichen aufgefüllt, um die Entsprechung aufrechtzuerhalten.
http://apidock.com/ruby/String/tr
gsubGibt eine Kopie von zurück, strwobei alle Vorkommen von Mustern das zweite Argument ersetzen. Das Muster ist normalerweise ein Regexp; Wenn es als Zeichenfolge angegeben wird, werden alle darin enthaltenen Metazeichen für reguläre Ausdrücke wörtlich interpretiert, z. B. \dstimmen sie mit einem Spiel überein, gefolgt von deiner Ziffer.
http://apidock.com/ruby/String/gsub
Antworten:
Verwenden
tr
Sie diese Option, wenn Sie einzelne Zeichen ersetzen (übersetzen) möchten.tr
Übereinstimmungen mit einzelnen Zeichen (nicht über einen regulären Ausdruck), daher müssen die Zeichen im ersten Zeichenfolgenargument nicht in derselben Reihenfolge vorkommen. Wenn ein Zeichen gefunden wird, wird es durch das Zeichen ersetzt, das im zweiten Zeichenfolgenargument am selben Index gefunden wird:Verwenden
gsub
Sie diese Option, wenn Sie einen regulären Ausdruck verwenden müssen oder wenn Sie längere Teilzeichenfolgen ersetzen möchten:quelle
tr
bedeutet "übersetzen", wie in "Zeichen übersetzen", was genau das ist, was er tut. Es ist nach dem gleichnamigen Unix-Dienstprogramm benannt (das für seine obskuren und kurzen Namen bekannt ist).tr
kann nur ein einzelnes Zeichen durch ein einzelnes festes Zeichen ersetzen (obwohl Sie mehrere Übereinstimmungen dieser Art in einem einzigentr
Aufruf platzieren können), ist aber schnell.gsub
kann komplizierte Muster mit Regex abgleichen und durch ein kompliziertes Berechnungsergebnis ersetzen, ist aber langsamer alstr
.quelle
tr
mehrmals schneller sind alsgsub
. Hier ist ein Benchmark, wie schnell als seintr
könntegsub
. github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…tr
Gibt eine Kopie von zurück,str
wobei die Zeichen infrom_str
durch die entsprechenden Zeichen in ersetzt werdento_str
. Wennto_str
es kürzer als istfrom_str
, wird es mit seinem letzten Zeichen aufgefüllt, um die Entsprechung aufrechtzuerhalten. http://apidock.com/ruby/String/trgsub
Gibt eine Kopie von zurück,str
wobei alle Vorkommen von Mustern das zweite Argument ersetzen. Das Muster ist normalerweise ein Regexp; Wenn es als Zeichenfolge angegeben wird, werden alle darin enthaltenen Metazeichen für reguläre Ausdrücke wörtlich interpretiert, z. B.\d
stimmen sie mit einem Spiel überein, gefolgt vond
einer Ziffer. http://apidock.com/ruby/String/gsubquelle