2012-11-25 9 views
12

Gibt es einen coolen Weg in Ruby ein Array mit 1 bis 100 mit nur ungeraden Einträgen (1, 3 usw.) zu erstellen. Ich habe jetzt eine Schleife dafür, aber das ist offensichtlich keine coole Art, es zu tun! Irgendwelche Vorschläge?1 bis 100 ungerade Zahlen im Array

Mein aktueller Code:

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

    array 
end 

Vielen Dank im Voraus

Antwort

33

Die Range Klasse zu diesem Zweck mit einem sehr coolen Feature kommt:

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

bessere Antwort als meine. lerne jeden Tag etwas Neues. – Hugs

+0

+1 Sehr stilvoll. – tjameson

+0

Danke, das ist eine großartige und einfache Antwort! –

3

Da müssen Sie eine Funktion, dann gilt:

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

Nicht sehr effektive Lösung, aber sehr elegant:

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

nicht effizient sein kann, aber ein kurzes Stück Code:

(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

Ich mag die Art, wie dies die Bedeutung vermittelt. +1 für Lesbarkeit. –

+1

Ich glaube nicht, dass "ein kurzer Code" Englisch ist. Ich denke, dass "ein kurzes Stück Code" besser funktionieren würde. –

5

Gerade liebäugelt ...

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

Der erste ist zu technisch und ist kein rubinrischer Weg. Es ist nicht schön. Wenn ich dieser Linie folgen würde, würde ich 'map {| i | 2 * i + 1} '. Der zweite ist gut. – sawa

+1

@sawa Der erste ist ein Witz, wahrscheinlich ein schlechter. – steenslag

+0

Das OP hat nach einem coolen Weg gefragt, nicht unbedingt einen wartbaren oder schönen Weg! –

1

Sie kann es als ein Einzeiler tun, wenn Sie das Array instanziieren:

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] 
Verwandte Themen