16

Rubyで奇数エントリ(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

前もって感謝します

4

6 に答える 6

44

Rangeクラスには、その目的のための非常に優れた機能が付属しています。

1.9.3-p286 :005 > (1..10).step(2).to_a
 => [1, 3, 5, 7, 9] 
于 2012-11-25T10:14:20.500 に答える
15

効率的ではないかもしれませんが、短いコードです:

(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]
于 2012-11-25T10:38:08.653 に答える
5

弄ってるだけ…

(0...50).map(&:object_id)
#or
1.step(100,2).to_a
于 2012-11-25T12:07:16.710 に答える
3

関数が必要なので、次のようになります。

def odd_to(n)
    (1..n).step(2).to_a
end
于 2012-11-25T10:16:29.463 に答える
2

あまり効果的な解決策ではありませんが、非常にエレガントです:

(1..100).select {|a| a%2 != 0}
于 2012-11-25T10:25:24.247 に答える
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]
于 2015-11-04T23:48:49.203 に答える