2012-11-25 10 views
12

Czy istnieje jakiś fajny sposób w Ruby, aby utworzyć tablicę z 1 do 100 z tylko nieparzystymi wpisami (1, 3 itd.). Teraz mam do tego pętlę, ale to oczywiście nie jest fajny sposób na zrobienie tego! Jakieś sugestie?1 do 100 nieparzystych liczb w tablicy

Mój bieżący kod:

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

    array 
end 

góry dzięki

Odpowiedz

33

Klasa Range pochodzi z bardzo fajna funkcja do tego celu:

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

lepsza odpowiedź niż moja. nauczyć się czegoś nowego codziennie. – Hugs

+0

+1 Bardzo elegancki. – tjameson

+0

Dzięki, to jest świetna i prosta odpowiedź! –

3

ponieważ trzeba funkcję, a następnie:

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

Nie bardzo skuteczne rozwiązanie, ale bardzo elegancki:

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

nie może być skuteczna, ale krótki fragment kodu:

(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

Podoba mi się sposób, w jaki przekazuje to znaczenie. +1 dla czytelności. –

+1

Nie uważam, że "krótki kod" jest prawidłowy w języku angielskim. Myślę, że "krótki kawałek kodu" działałby lepiej. –

5

Wystarczy toying ...

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

Pierwsza z nich jest zbyt techniczna i nie jest rubinowa. To nie jest piękne. Gdybym miał iść tą linią, zrobiłbym 'map {| i | 2 * i + 1} '. Drugi jest dobry. – sawa

+1

@sawa Pierwszy to żart, prawdopodobnie zły. – steenslag

+0

OP poprosił o fajny sposób, niekoniecznie łatwy do utrzymania lub piękny sposób! –

1

You można to zrobić jako jedno-liniowy podczas tworzenia tablicy:

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] 
Powiązane problemy