2012-11-25 13 views
12

में 1 से 100 विषम संख्याएं रूबी में केवल अजीब प्रविष्टियों (1, 3 आदि) के साथ 1 से 100 के साथ सरणी बनाने के लिए कोई अच्छा तरीका है। अब मेरे पास इसके लिए एक लूप है लेकिन यह स्पष्ट रूप से ऐसा करने का एक अच्छा तरीका नहीं है! कोई सुझाव?सरणी

मेरे वर्तमान कोड:

def create_1_to_100_odd_array 
    array = [1] 
    i = 3 
    while i < 100 
     array.push i 
     i += 2 
    end 

    array 
end 

अग्रिम धन्यवाद

उत्तर

33

Range वर्ग उस उद्देश्य के लिए एक बहुत ही शांत सुविधा के साथ आता:

1.9.3-p286 :005 > (1..10).step(2).to_a 
=> [1, 3, 5, 7, 9] 
+0

मेरा से बेहतर जवाब। प्रति दिन कुछ नया सीखें। – Hugs

+0

+1 बहुत उत्तम दर्जे का। – tjameson

+0

धन्यवाद, यह एक अच्छा और सरल जवाब है! –

3

आप एक समारोह है, तो जरूरत के बाद से:

def odd_to(n) 
    (1..n).step(2).to_a 
end 
2

बहुत प्रभावी नहीं समाधान है, लेकिन काफी सुरुचिपूर्ण:

(1..100).select {|a| a%2 != 0} 
13

कुशल नहीं हो सकता है, लेकिन कोड के एक छोटे टुकड़े:

(1..100).select(&:odd?) 

# => [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99] 
+0

मुझे इस तरह का अर्थ बताता है। पठनीयता के लिए +1। –

+1

मुझे नहीं लगता कि "एक छोटा कोड" मान्य अंग्रेजी है। मुझे लगता है कि "कोड का एक छोटा टुकड़ा" बेहतर काम करेगा। –

5

बस कर रही ...

(0...50).map(&:object_id) 
#or 
1.step(100,2).to_a 
+0

पहला एक बहुत तकनीकी है और एक रूबीशिप तरीका नहीं है। यह सुंदर नहीं है। अगर मैं उस रेखा के साथ जाना चाहता था, तो मैं 'मानचित्र {| i | 2 * i + 1} '। दूसरा एक अच्छा है। – sawa

+1

@sawa पहला वाला एक मजाक है, शायद एक बुरा है। – steenslag

+0

ओपी ने एक शांत तरीके से पूछा, जरूरी नहीं कि एक रखरखाव या सुंदर तरीका! –

1

आप जब आप सरणी को तुरंत चालू करते हैं तो इसे एक-लाइनर के रूप में कर सकते हैं:

def create_array_of_odds_to(n) 
    Array.new((n + 1)/2) {|i| 2 * i + 1} 
end 

create_array_of_odds_to 10 # => [1, 3, 5, 7, 9]