2011-08-07 7 views
3

ルビーでは、例えば1〜100の間に乱数を生成する方法はありますか?20,30,40は除きますか?特定の数字を除いたXとYの間の乱数の生成

私は

def random_number 
    random_number = rand(100) 
    while random_number == 20 || 30 || 40 
    random_number = rand(100) 
    end 
    return random_number 
end 

ような何かを行うことができます...しかし、それは非常に効率的ないないようです(プラスその特定の例は、おそらく動作しないでしょう)。

もっと簡単な方法はありますか?どんな助けでも大歓迎です!

答えて

17

1〜100の配列を作成します。この配列から不要な要素を削除します。その後、配列から乱数を選択します。

([*1..100] - [20, 30, 40]).sample 

要素の数が膨大であれば

は、あなたが不要な数は、より良い仕事と見つかった場合は、ランダムに1と再試行を選ぶの後、あなたのアプローチ、千万言います。また、不要な番号のリストが長い場合は、配列またはセットに入れ、各値を個別にチェックするのではなく、メンバーシップをテストすることもできます。だから、代わりに、あなたができる

if(x == 20 || x == 30 || x == 40) 

unwanted_numbers = [20, 30, 40] 
if(unwanted_numbers.include?(x)) 
+0

これは完璧です。ありがとうございました! – Jon