Apa perbedaan antara gsub dan sub metode untuk Ruby Strings


111

Saya telah membaca dokumentasi untuk Stringhari ini, dan saya melihat :submetodenya, yang tidak pernah saya perhatikan sebelumnya. Saya telah menggunakan :gsubdan tampaknya mereka pada dasarnya sama. Adakah yang bisa menjelaskan perbedaannya kepada saya? Terima kasih!


Jawaban:


208

The gsingkatan global, seperti dalam menggantikan global (semua):

Dalam irb:

>> "hello".sub('l', '*')
=> "he*lo"
>> "hello".gsub('l', '*')
=> "he**o"

13
Ya. Saya mengerti sekarang. Dalam pembelaan saya, saya rasa ini tidak terlalu jelas ... Sampai sekarang, begitulah.
Ryanmt

15
Saya setuju dengan Anda bahwa itu tidak jelas! Java menyebutnya replacedan replaceAll. Tapi Ruby berakar pada Perl yang menggunakan gpengubah. Itu hanya salah satu dari hal-hal itu.
Ray Toal

1
Untungnya, sekarang sudah jelas. Saya akan tahu di masa depan.
Ryanmt

Ngomong-ngomong, subjauh lebih cepat daripada gsub, ada patokan di sini github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
JackXu

Saya melihat beberapa perilaku yang berbeda untuk ini: A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by" Adakah pemikiran mengapa gsub!hanya tampaknya hanya menemukan / mengganti contoh pertama saat menggunakan grup regex?
Bennett Talpers

31

Perbedaannya adalah bahwa subhanya menggantikan kemunculan pertama dari pola yang ditentukan, sedangkan gsubmelakukannya untuk semua kemunculan (yaitu, menggantikan secara global).


10
Jika Anda menjawab satu menit sebelumnya, mungkin 1020 perwakilan lagi akan menjadi milik Anda. :)
Andrew Grimm

3
value = "abc abc"
puts value                                # abc abc
# Sub replaces just the first instance.
value = value.sub("abc", "---")
puts value                                # --- abc
# Gsub replaces all instances.
value = value.gsub("abc", "---")
puts value                                # --- ---

-2

subdan gsubmelakukan penggantian masing-masing pertandingan pertama dan semua.

sub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
    fixed = FALSE, useBytes = FALSE)

gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
     fixed = FALSE, useBytes = FALSE)


sub("4", "8", "An Introduction to R Software Course will be of 4 weeks duration" )  
##"An Introduction to R Software Course will be of 8 weeks duration"

gsub("4", "8", "An Introduction to R Software Course will be of 4 weeks duration" )
##"An Introduction to R Software Course will be of 8 weeks duration"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.