रूबी में प्रत्येक स्ट्रिंग के प्रत्येक चरित्र पर ध्यान देने योग्य 1.8.6 (प्रत्येक_चर)


86

मैं माणिक के लिए नया हूं और वर्तमान में रूबी में एक स्ट्रिंग स्ट्रिंग से अलग से प्रत्येक चरित्र पर काम करने की कोशिश कर रहा हूं। मैं रूबी 1.8.6 का उपयोग कर रहा हूं और कुछ ऐसा करना चाहता हूं:

"ABCDEFG".each_char do |i|
  puts i
end

यह एक अपरिभाषित विधि `प्रत्येक_चर’ ​​त्रुटि पैदा करता है।

मैं एक ऊर्ध्वाधर उत्पादन देखने की उम्मीद कर रहा था:

A
B
C
D
..etc

क्या each_charविधि केवल 1.9 के लिए परिभाषित है? मैंने सादे eachविधि का उपयोग करने की कोशिश की , लेकिन ब्लॉक केवल एक पंक्ति में पूरे स्ट्रिंग को अलग करता है। एकमात्र तरीका है कि मैं यह करूं कि यह कैसे करना है, जो कि असुविधाजनक है, जिससे भीख मांगने वाले पात्रों का एक सरणी बनाना है:

['A','B','C','D','...'].each do|i|
  puts i
end

यह वांछित परिणाम देता है:

A
B
C
..etc

क्या शायद इस उत्पादन को प्राप्त करने का एक तरीका है जिसे शुरू करने के लिए एक अनमॉडिफाइड स्ट्रिंग का उपयोग किया जाए?

मुझे लगता है कि जावा समकक्ष है:

for (int i = 0; i < aString.length(); i++){
  char currentChar = aString.charAt(i);
  System.out.println(currentChar);
}

1
"asfds" .char.each ....
मुहम्मद उमर

जवाबों:


115

मेरी भी यही समस्या है। मैं आमतौर पर इसका सहारा लेता हूं String#split:

"ABCDEFG".split("").each do |i|
  puts i
end

मुझे लगता है कि आप इसे इस तरह से भी लागू कर सकते हैं:

class String
  def each_char
    self.split("").each { |i| yield i }
  end
end

संपादित करें: अभी तक एक और विकल्प है String#each_byte, रूबी 1.8.6 में उपलब्ध है, जो ASCII स्ट्रिंग में प्रत्येक वर्ण का ASCII मान लौटाता है:

"ABCDEFG".each_byte do |i|
  puts i.chr # Fixnum#chr converts any number to the ASCII char it represents
end

उपयोगी टिप के लिए धन्यवाद। यह बढ़िया काम करता है। तो प्रत्येक_चर्चा विधि किसके लिए प्रयोग की जाती है? बस नए संस्करण के लिए मुझे लगता है?
1

मैंने अब तक इसे देखा नहीं है, लेकिन Googling के बाद थोड़ा सा, जाहिरा तौर पर यह 1.8.6 डॉक्स में गलती से सूचीबद्ध है, लेकिन 1.8.7 तक उपलब्ध नहीं है।
जेरेमी रुटेन

प्रत्येक_चर विधि पुराने संस्करण के लिए है, जो अन्यथा नहीं है। अभी तक ruby-doc.org/core/classes/String.html#M000862 पर और मेरे आश्चर्य के लिए प्रलेखित नहीं है, मैं देखता हूं कि प्रत्येक_चर्चा एक स्ट्रिंग पैदा करता है, जैसे कि जेरेमी का विभाजन।
मार्टिन डोरी

15

La_f0ka की टिप्पणी का विस्तार, esp। यदि आपको अपने कोड में सूचकांक स्थिति की आवश्यकता है, तो आपको ऐसा करने में सक्षम होना चाहिए

s = 'ABCDEFG'
for pos in 0...s.length
    puts s[pos].chr
end

.chrरूबी के रूप में महत्वपूर्ण <1.9 है रिटर्न उस स्थिति में चरित्र के कोड के स्थान पर उस स्थिति में एक चरित्र की सबस्ट्रिंग


5
0..s.length - 1=0...s.length
मैथ्यूॉक

धन्यवाद @MatthewRock, परिवर्तित।
sschuberth

1

वहाँ वास्तव में 1.8.6 में एक समस्या है। और यह इस संस्करण के बाद ठीक है

1.8.6 में, आप इसे जोड़ सकते हैं:

requre 'jcode'

1

लेकिन अब आप और भी बहुत कुछ कर सकते हैं:

a = "cruel world"

a.scan(/\w+/)        #=> ["cruel", "world"]

a.scan(/.../)        #=> ["cru", "el ", "wor"]

a.scan(/(...)/)      #=> [["cru"], ["el "], ["wor"]]

a.scan(/(..)(..)/)   #=> [["cr", "ue"], ["l ", "wo"]]

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