2011-08-07 106 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 

如果元素的數量是巨大的,說10萬元,那麼你隨機挑選一個和重試,如果你發現了一個不必要的數量將工作更好的辦法。此外,如果不需要的數字列表很長,則可以將其放入數組或集合中,並測試成員資格,而不是單獨檢查每個值。因此,而不是,

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

你可以做,

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

這是完美的。謝謝! – Jon

相關問題