Tr ve gsub arasındaki fark nedir?


133

Ben Ruby belgelerine okuyor ve arasındaki fark ile karıştı gsubve tr. İkisi arasındaki fark nedir?


8
Bu soruyu buldum çünkü RuboCop gsub kullanımım konusunda uyardı - sanırım aşağıdaki yanıtlar yanıtı iyi açıklıyor, temelde gsub ve tr arasındaki fark nedir.
JohnK

Yanıtlar:


180

trTek karakterleri değiştirmek (tercüme etmek) istediğinizde kullanın .

trtek karakterlerle eşleşir (normal bir ifade aracılığıyla değil), bu nedenle karakterlerin ilk dize bağımsız değişkeninde aynı sırada olması gerekmez. Bir karakter bulunduğunda, ikinci dize bağımsız değişkeninde aynı dizinde bulunan karakterle değiştirilir:

'abcde'.tr('bda', '123')
#=> "31c2e"

'abcde'.tr('bcd', '123')
#=> "a123e"

Kullanın gsubEğer normal bir ifade kullanmak gerektiğinde ya da daha uzun alt dizeleri değiştirmek istediğinizde:

'abcde'.gsub(/bda/, '123')
#=> "abcde"

'abcde'.gsub(/b.d/, '123')
#=> "a123e"

48
Biraz bağlam: isim tr, "karakterleri çevir" gibi "çevirmek" anlamına gelir, tam olarak yaptığı şey budur. Adını aynı adı taşıyan Unix yardımcı programından almıştır (belirsiz ve kısa adları ile bilinir).
Martin Tournoij

40
  • tryalnızca tek bir karakteri tek bir sabit karakterle değiştirebilir (ancak bu türden birden çok eşleşmeyi tek bir trçağrıya koyabilirsiniz ) ancak hızlıdır.
  • gsubregex kullanarak karmaşık kalıpları eşleştirebilir ve karmaşık bir hesaplama sonucuyla değiştirebilir, ancak daha yavaştır tr.

9
Doğru. Her ikisi de çalıştığından trbirkaç kat daha hızlıdır gsub. İşte ne kadar hızlı trolabileceğine dair bir ölçüt gsub. github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
JackXu

9

trstriçindeki karakterlerin from_stryerine karşılık gelen karakterlerin olduğu bir kopyasını döndürür to_str. Daha to_strkısa ise from_str, yazışmayı sürdürmek için son karakteri ile doldurulur. http://apidock.com/ruby/String/tr

gsubstrikinci bağımsız değişken için değiştirilen tüm kalıp oluşumlarının bir kopyasını döndürür . Kalıp tipik olarak bir Regexp'dir; Dize olarak verilirse, içerdiği herhangi bir normal ifade meta karakterleri tam anlamıyla yorumlanacaktır, örneğin bir rakam yerine \dbir boşlukla ve ardından gelen boşlukla eşleşecektir d. http://apidock.com/ruby/String/gsub

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.