Saya menemukan pertanyaan ini karena RuboCop memberi tahu saya tentang penggunaan gsub - saya pikir jawaban di bawah ini menjelaskan jawabannya dengan baik, yang pada dasarnya adalah apa perbedaan antara gsub dan tr.
JohnK
Jawaban:
180
Menggunakan tr saat Anda ingin mengganti (menerjemahkan) satu karakter.
trcocok dengan karakter tunggal (bukan melalui ekspresi reguler), oleh karena itu karakter tidak perlu muncul dalam urutan yang sama dalam argumen string pertama. Ketika karakter ditemukan, itu diganti dengan karakter yang ditemukan pada indeks yang sama dalam argumen string kedua:
Sedikit konteks: namanya trberarti "menerjemahkan", seperti dalam "menerjemahkan karakter", yang persis seperti apa fungsinya. Ini dinamai setelah utilitas Unix dengan nama yang sama (yang terkenal dengan nama-nama pendek dan tidak jelas).
Martin Tournoij
40
trhanya dapat mengganti satu karakter dengan satu karakter tetap (meskipun Anda dapat menempatkan beberapa kecocokan seperti ini dalam satu trpanggilan) tetapi cepat.
gsubdapat mencocokkan pola yang rumit menggunakan regex, dan mengganti dengan hasil perhitungan yang rumit, tetapi lebih lambat dari tr.
trmengembalikan salinan strdengan karakter from_strdigantikan oleh karakter yang sesuai di to_str. Jika to_strlebih pendek dari from_str, itu diisi dengan karakter terakhir untuk mempertahankan korespondensi.
http://apidock.com/ruby/String/tr
gsubmengembalikan salinan strdengan semua kemunculan pola yang diganti untuk argumen kedua. Pola ini biasanya Regexp; jika diberikan sebagai String, setiap metakarakter ekspresi reguler yang dikandungnya akan ditafsirkan secara harfiah, misalnya \dakan cocok dengan serangan balik diikuti oleh d, bukan digit.
http://apidock.com/ruby/String/gsub
Jawaban:
Menggunakan
tr
saat Anda ingin mengganti (menerjemahkan) satu karakter.tr
cocok dengan karakter tunggal (bukan melalui ekspresi reguler), oleh karena itu karakter tidak perlu muncul dalam urutan yang sama dalam argumen string pertama. Ketika karakter ditemukan, itu diganti dengan karakter yang ditemukan pada indeks yang sama dalam argumen string kedua:Gunakan
gsub
saat Anda perlu menggunakan ekspresi reguler atau ketika Anda ingin mengganti substring yang lebih panjang:sumber
tr
berarti "menerjemahkan", seperti dalam "menerjemahkan karakter", yang persis seperti apa fungsinya. Ini dinamai setelah utilitas Unix dengan nama yang sama (yang terkenal dengan nama-nama pendek dan tidak jelas).tr
hanya dapat mengganti satu karakter dengan satu karakter tetap (meskipun Anda dapat menempatkan beberapa kecocokan seperti ini dalam satutr
panggilan) tetapi cepat.gsub
dapat mencocokkan pola yang rumit menggunakan regex, dan mengganti dengan hasil perhitungan yang rumit, tetapi lebih lambat daritr
.sumber
tr
beberapa kali lebih cepat daripadagsub
. Berikut adalah patokan tentang seberapa cepattr
bisa dibandingkangsub
. github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…tr
mengembalikan salinanstr
dengan karakterfrom_str
digantikan oleh karakter yang sesuai dito_str
. Jikato_str
lebih pendek darifrom_str
, itu diisi dengan karakter terakhir untuk mempertahankan korespondensi. http://apidock.com/ruby/String/trgsub
mengembalikan salinanstr
dengan semua kemunculan pola yang diganti untuk argumen kedua. Pola ini biasanya Regexp; jika diberikan sebagai String, setiap metakarakter ekspresi reguler yang dikandungnya akan ditafsirkan secara harfiah, misalnya\d
akan cocok dengan serangan balik diikuti olehd
, bukan digit. http://apidock.com/ruby/String/gsubsumber