Saya sedang membaca dokumentasi Ruby dan bingung dengan perbedaan antara gsubdan tr. Apa perbedaan keduanya?
Saya sedang membaca dokumentasi Ruby dan bingung dengan perbedaan antara gsubdan tr. Apa perbedaan keduanya?
Jawaban:
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:
'abcde'.tr('bda', '123')
#=> "31c2e"
'abcde'.tr('bcd', '123')
#=> "a123e"
Gunakan gsubsaat Anda perlu menggunakan ekspresi reguler atau ketika Anda ingin mengganti substring yang lebih panjang:
'abcde'.gsub(/bda/, '123')
#=> "abcde"
'abcde'.gsub(/b.d/, '123')
#=> "a123e"
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).
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.trbeberapa kali lebih cepat daripada gsub. Berikut adalah patokan tentang seberapa cepat trbisa dibandingkan gsub. github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
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