माणिक में लूप के लिए सिंटैक्स


87

रूबी में इस प्रकार के लूप के लिए मैं कैसे करूं?

for(int i=0; i<array.length; i++) {

}

@johannes पुस्तक पढ़ना एक अच्छा विचार है, लेकिन अधिमानतः रूबी 1.6 के बारे में कोई नहीं!
एंड्रयू ग्रिम

माणिक-डॉक में कुछ उपयोगी तरीकों पर एक नज़र रखना मत भूलना : अनगिनत मॉड्यूल
इवान चौ

जवाबों:


118
array.each do |element|
  element.do_stuff
end

या

for element in array do
  element.do_stuff
end

यदि आपको सूचकांक की आवश्यकता है, तो आप इसका उपयोग कर सकते हैं:

array.each_with_index do |element,index|
  element.do_stuff(index)
end

15
मैं विशेष रूप से एक लूप में अनुक्रमण के लिए देख रहा था, इनमें से कोई भी समाधान तुरंत स्पष्ट नहीं करता है कि यह कैसे करना है। op ने कोड में array.length के साथ अपने इरादे को धोखा दिया ...
jheriko

6
मेरे उत्तर को ध्यान से पढ़ें। अनुक्रमण के साथ एक लूपिंग समाधान शामिल है।
ईमंतस

8
अक्सर बार, eachमहान है। लेकिन कभी-कभी मैं सिर्फ लूप के लिए एक गॉडडैम पारंपरिक चाहता हूं। कभी-कभी "रूबी रास्ता" सिर्फ सादा कष्टप्रद हो सकता है।
रुबेन मार्टिनेज जूनियर

1
मैं कैसे रूबी में इंडेक्स को मैन्युअल रूप से सेट करता हूं, इसलिए मैं खुद को एक प्रकार से लिख सकता हूं
मुहम्मद उमर

6
क्या होगा अगर मैं अगले दो पुनरावृत्तियों को छोड़ना चाहता हूं
मुहम्मद उमर

77
limit = array.length;
for counter in 0..limit
 --- make some actions ---
end

ऐसा करने का दूसरा तरीका निम्नलिखित है

3.times do |n|
  puts n;
end

Thats 0, 1, 2 को प्रिंट करेगा, इसलिए इसे ऐरे इटरेटर की तरह भी इस्तेमाल किया जा सकता है

लगता है कि संस्करण बेहतर लेखक की जरूरतों के लिए फिट है


29

मैं इसे "रूबी फॉर लूप" के लिए एक शीर्ष लिंक के रूप में रखता हूं, इसलिए मैं छोरों के लिए एक समाधान जोड़ना चाहता था जहां कदम बस '1' नहीं था। इन मामलों के लिए, आप 'स्टेप' विधि का उपयोग कर सकते हैं जो न्यूमेरिक्स और डेट ऑब्जेक्ट पर मौजूद है। मुझे लगता है कि यह 'लूप' के लिए एक करीबी अनुमान है।

start = Date.new(2013,06,30)
stop = Date.new(2011,06,30)
# step back in time over two years, one week at a time
start.step(stop, -7).each do |d| 
    puts d
end

20

समतुल्यता होगी

for i in (0...array.size)
end

या

(0...array.size).each do |i|
end

या

i = 0
while i < array.size do
   array[i]
   i = i + 1 # where you may freely set i to any value
end

17
array.each_index do |i|
  ...
end

यह बहुत बकवास नहीं है, लेकिन यह रूबी में सवाल से लूप के लिए सबसे अच्छा तरीका है


ये जबरदस्त है। यह सच है कि जवाब नहीं है each, बल्कि each_index। +1
डेन रोसेन्स्टार्क

12

पाश को एक निश्चित संख्या में पुनरावृत्त करने के लिए, कोशिश करें:

n.times do
  #Something to be done n times
end

10

यदि आप अपने सरणी का उपयोग करने की जरूरत नहीं है आप उपयोग कर सकते हैं, (सिर्फ पाश के लिए एक सरल) तक या प्रत्येक:

तक:

1.9.3p392 :030 > 2.upto(4) {|i| puts i}
2
3
4
 => 2 

से प्रत्येक:

1.9.3p392 :031 > (2..4).each {|i| puts i}
2
3
4
 => 2..4 

8

क्या? 2010 से और किसी ने उल्लेख नहीं किया है कि रूबी के पास / लूप में जुर्माना है (यह सिर्फ इसका उपयोग नहीं करता है):

ar = [1,2,3,4,5,6]
for item in ar
  puts item
end

5
.Each का एक फायदा ... यह है कि ब्लॉक अस्थायी लूप के अंत में स्कोप से बाहर हो जाता है, जबकि ... के लिए ... स्कोप में अस्थायी रूप से निकल जाता है ।
वेन कॉनराड


0

रूबी की गणना पाश वाक्य रचना अलग है:

collection.each do |item|
...
end

यह "ऑब्जेक्ट ऑब्जेक्ट उदाहरण संग्रह 'के' प्रत्येक 'विधि के लिए एक कॉल के रूप में पढ़ता है जो तर्क के रूप में' अवरोधक 'के साथ ब्लॉक लेता है।" रूबी में ब्लॉक सिंटैक्स सिंगल लाइन स्टेटमेंट के लिए 'डू ... एंड' या '{...}' है।

ब्लॉक तर्क '| आइटम |' वैकल्पिक है, लेकिन यदि प्रदान किया जाता है, तो पहला तर्क स्वचालित रूप से अनूदित आइटम का प्रतिनिधित्व करता है।

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