के रूप में जल्दी Ruby 1.8.7, के रूप में से
आप इस तरह अगले मूल्य की अगली प्राप्त कर सकते हैं संख्यात्मक मॉड्यूल में एक विधि each_cons
है जो लगभग वही है जो आप चाहते हैं:
each_cons (एन) {...} → शून्य
each_cons (एन) → an_enumerator
दोहराता लगातार <n> तत्वों में से प्रत्येक सरणी के लिए दिए गए ब्लॉक। यदि कोई ब्लॉक नहीं दिया जाता है, तो एक गणक देता है।
उदा .:
(1..10).each_cons(3) { |a| p a }
# outputs below
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, 6]
[5, 6, 7]
[6, 7, 8]
[7, 8, 9]
[8, 9, 10]
केवल समस्या यह है कि यह पिछले तत्व दोहराया नहीं जाता है। लेकिन यह ठीक करने के लिए तुच्छ है। विशेष रूप से, आप
store = 0
range = 1..5
range.each_cons(2) do |i, next_value_of_i|
store += i + next_value_of_i
end
store += range.end
p store # => 29
चाहते लेकिन क्या आप भी ऐसा कर सकता है:
range = 1..5
result = range.each_cons(2).reduce(:+).reduce(:+) + range.end
p result # => 29
वैकल्पिक रूप से, आप और अधिक पठनीय होने के लिए निम्न हो सकते हैं:
result = range.end + range.each_cons(2)
.reduce(:+)
.reduce(:+)
'while' FTW ... – texasbruce