रूबी: एक सीमा पर पुनरावृति कैसे करें, लेकिन सेट वेतन वृद्धि में?


156

तो मैं एक सीमा पर इतरा रहा हूँ जैसे:

(1..100).each do |n|
    # n = 1
    # n = 2
    # n = 3
    # n = 4
    # n = 5
end

लेकिन मैं जो करना चाहता हूं वह 10 के दशक से है।

तो n1 से बढ़ने के क्रम में , अगला nवास्तव में 10, फिर 20, 30, आदि होगा।


1
संभावित डुप्लिकेट stackoverflow.com/questions/2583665/about-ruby-range
डिएगो डायस

@DiegoDias लेकिन यह सबसे अच्छा है और फिर उस धागे
जैक्सन Jegatheesan

जवाबों:


256

पूर्ण एपीआई के लिए http://ruby-doc.org/core/classes/Range.html#M000695 देखें ।

मूल रूप से आप step()विधि का उपयोग करते हैं । उदाहरण के लिए:

(10..100).step(10) do |n|
    # n = 10
    # n = 20
    # n = 30
    # ...
end

12
इस उत्तर ने मुझे उस चीज़ की ओर अग्रसर कर दिया, जिसकी मुझे तलाश थी ... यदि आपके पास दो बार हैं, तो आप कर सकते हैं(time1..time2).step(15.minutes) do |time|
दिवाकर


6

यहाँ यह करने के लिए एक और शायद परिचित तरीका है:

for i in (0..10).step(2) do
    puts i
end

10
क्षमा करें, लेकिन रूबी स्टाइल गाइड उपयोग forछोरों को दृढ़ता से हतोत्साहित करता है।
डार्थ एलीगियस

@DarthEgregious क्यों है?
डग

यह दर्शन का एक विस्तार है कि हर बात एक वस्तु है और हर कार्रवाई एक विधि कॉल है। इसलिए एक अंतर्निहित इन लूपिंग का उपयोग करने के बजाय for, आपको eachविधि का उपयोग करना चाहिए ।
डार एग्रीशियस

5
rng.step(n=1) {| obj | block } => rng

ब्लॉक पर प्रत्येक nth तत्व को पास करते हुए, rng पर Iterates होता है। यदि श्रेणी में संख्याएँ या तार होते हैं, तो प्राकृतिक ऑर्डरिंग का उपयोग किया जाता है। अन्यथा चरण सीमा तत्वों के माध्यम से पुनरावृति के लिए आह्वान करता है। निम्न कोड कक्षा Xs का उपयोग करता है, जिसे वर्ग-स्तरीय प्रलेखन में परिभाषित किया गया है।

range = Xs.new(1)..Xs.new(10)
range.step(2) {|x| puts x}
range.step(3) {|x| puts x}

पैदा करता है:

1 x
3 xxx
5 xxxxx
7 xxxxxxx
9 xxxxxxxxx
1 x
4 xxxx
7 xxxxxxx
10 xxxxxxxxxx

संदर्भ: http://ruby-doc.org/core/classes/Range.html

......

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