2015-06-23 5 views
7

में संख्याओं और आधा संख्याओं का ऐरे मैं पूरे और आधा संख्याओं (यानी 10, 10.5, 11, 11.5, 12) में मापा गया आकार वाले सरणी को पॉप्युलेट करने की कोशिश कर रहा हूं। अब तक मेरे पास है:रूबी

(10..12).map{ |size| [size, size + 0.5] }.flatten[0...-1] 

करता है समतल और अंतिम तत्व निकाला बिना रूबी में इस अस्तित्व करने का एक अधिक सुवक्ता तरीका है?

उत्तर

14

मेरा व्यक्तिगत पसंदीदा:

>> (10..12).step(0.5).to_a 
=> [10.0, 10.5, 11.0, 11.5, 12.0] 
+0

यह वही है जो मैं खोज रहा था। बहुत साफ और पालन करने में आसान है! धन्यवाद! – Stussa

+1

कोई समस्या नहीं है। यह इस तरह की विशेषताएं है कि मैं क्यों <3 रूबी Enumerables। – user12341234

0

आप लैम्बडास का उपयोग कर सकते हैं (ध्यान दें कि यह फ्लोट आउटपुट करता है) - मैं आपको यह तय करने दूंगा कि यह अधिक स्पष्ट है या नहीं।

irb(main):001:0> fn = ->(x, y) { (x*2..y*2).map { |i| i/2.0 } } 
=> #<Proc:[email protected](irb):1 (lambda)> 
irb(main):002:0> fn.call(10, 12) 
=> [10.0, 10.5, 11.0, 11.5, 12.0] 
+0

एक ही टिप्पणी जैसा कि मैंने विली के लिए छोड़ा था। –

+3

मैंने इसे अपने उत्तर पर स्पष्ट कर दिया कि यह केवल फ्लोट आउटपुट करता है। – arturhoo

0

मैं मान लिया गया है तो आप वापस आ सरणी में मानों Fixnum और Float के बीच वैकल्पिक करना चाहते हैं, के रूप में अपने उदाहरण में:

(10..12).flat_map { |size| [size, size + 0.5] }.tap { |a| a.pop } 
    #=> [10, 10.5, 11, 11.5, 12]