Tr और gsub में क्या अंतर है?


133

मैं रूबी प्रलेखन पढ़ रहा था और बीच का अंतर के साथ भ्रमित हो गया gsubऔर tr। दोनों के बीच क्या अंतर है?


8
मुझे यह सवाल इसलिए लगा क्योंकि रुबॉप ने gsub के मेरे इस्तेमाल पर अलर्ट किया था - मुझे लगता है कि नीचे दिए गए उत्तर अच्छी तरह से समझाते हैं, जो मूल रूप से gsub और tr के बीच का अंतर है।
जॉन

जवाबों:


180

trजब आप एकल वर्णों को बदलना (अनुवाद करना) करना चाहते हैं तो उपयोग करें ।

trएकल वर्णों पर मेल खाता है (नियमित अभिव्यक्ति के माध्यम से नहीं), इसलिए वर्णों को पहले स्ट्रिंग तर्क में एक ही क्रम में होने की आवश्यकता नहीं है। जब कोई वर्ण पाया जाता है, तो उसे उस वर्ण के साथ बदल दिया जाता है, जो दूसरे स्ट्रिंग तर्क में एक ही सूचकांक में पाया जाता है:

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

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

का प्रयोग करें gsubजब आप रेगुलर एक्सप्रेशन का उपयोग करने की जरूरत है या आप लंबे समय तक सबस्ट्रिंग बदलना चाहते हैं जब:

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

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

48
संदर्भ के बिट: नाम का trअर्थ "अनुवाद" है, जैसा कि "अनुवाद वर्ण" में है, जो वास्तव में यही करता है। यह उसी नाम की यूनिक्स उपयोगिता के नाम पर रखा गया है (जो अपने अस्पष्ट और छोटे नामों के लिए जाना जाता है)।
मार्टिन टूरनोइज

40
  • trकिसी एकल वर्ण को केवल एकल निश्चित वर्ण से बदल सकता है (हालाँकि आप इस प्रकार के कई मेल एक ही trकॉल में डाल सकते हैं) लेकिन तेज़ है।
  • gsubरेगेक्स का उपयोग करके जटिल पैटर्न से मिलान कर सकते हैं, और एक जटिल संगणना परिणाम के साथ बदल सकते हैं, लेकिन की तुलना में धीमी है tr

9
कि सही। जब दोनों काम trकी तुलना में कई गुना तेज है gsub। यहाँ एक बेंचमार्क है कि कितनी तेजी से trहो सकता है gsubgithub.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
JackXu

9

trstrवर्णों के साथ की एक प्रति लौटाता है जिसमें संबंधित वर्णों को from_strप्रतिस्थापित किया जाता है to_str। यदि इससे to_strकम है from_str, तो पत्राचार बनाए रखने के लिए इसे अपने अंतिम चरित्र के साथ जोड़ा जाता है। http://apidock.com/ruby/String/tr

gsubstrदूसरे तर्क के लिए प्रतिस्थापित पैटर्न की सभी घटनाओं के साथ एक प्रति लौटाता है । पैटर्न आमतौर पर एक Regexp है; यदि स्ट्रिंग के रूप में दिया जाता है, तो इसमें शामिल किसी भी नियमित अभिव्यक्ति मेटाचैकर की शाब्दिक रूप से व्याख्या की \dजाएगी , उदाहरण dके लिए एक अंक के बजाय एक बैकलैश का मिलान होगा । http://apidock.com/ruby/String/gsub

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.