मिलान के एन घटनाओं अप करने के लिए लगता है मैं निम्नलिखित सरणी है:रूबी गणनीय - तत्व
arr = [1, 3, 2, 5, 2, 4, 2, 2, 4, 4, 2, 2, 4, 2, 1, 5]
मैं पहले तीन अजीब तत्वों से युक्त एक सरणी चाहते हैं।
मैं जानता हूँ कि मैं यह कर सकता है:
arr.select(&:odd?).take(3)
लेकिन मैं पूरी सरणी के माध्यम से पुनरावृत्ति से बचने, और बदले में एक बार मैं तीसरे मैच मिल गया है वापस जाने के लिए चाहते हैं।
मैं निम्नलिखित समाधान के साथ आया था, जो मुझे लगता है कि मैं क्या चाहते है:
my_arr.each_with_object([]) do |el, memo|
memo << el if el.odd?; break memo if memo.size == 3
end
लेकिन वहाँ एक और अधिक सरल/ऐसा करने का मुहावरेदार तरीका है?
मैंने पुष्टि की कि 'बल' काम करता है, लेकिन मुझे [रूबी लैंग] में एक को छोड़कर दस्तावेज नहीं मिल रहा है (http://docs.ruby-lang.org/ja/2.1.0/method/Enumerator=3a= 3aLazy/i/force.html)। क्या आप जानते हैं कि यह आरडीओसी में प्रलेखन में क्यों नहीं है? क्या ऐसा इसलिए है क्योंकि यह केवल 'to_a' का उपनाम है? – sawa
एफवाईआई - आप 'arr.lazy.select (&: odd?) का उपयोग कर सकते हैं। पहले (3)' और 'बल' से बचें - 'टेक' आलसी है जबकि' पहला 'नहीं है। – Myst
@sawa मैं इसे भी नहीं ढूंढ सकता। यदि आपको लगता है, तो मेरा जवाब संपादित करने के लिए स्वतंत्र महसूस करें। –