2014-05-13 66 views
0

我對這段代碼有這個小問題:我想以數組的形式將此參數傳遞給此random_select方法,並且我想要返回一個隨機索引。我知道,由於範圍操作員的工作方式,它不起作用,爲此我們有sample方法。但任何人都可以解釋我爲什麼這個代碼返回nil作爲它的一個隨機值?使用範圍運算符+數組索引的蘭德方法

def random_select(array) 
    array[rand(array[0]..array[4])] 
end 

p random_select([1,2,3,4,5]) 

回答

1

因爲你的範圍訪問數組值,而不是數組索引:

array = [1, 2, 3, 4, 5] 
array[0] #=> 1 
array[4] #=> 5 
array[0]..array[4] #=> 1..5 

你需要的是這樣實現的:

def random_select(array) 
    indexes = 0...array.size #=> 0...5 
    array[rand(indexes)] 
end 

array = [1, 2, 3, 4, 5] 
Array.new(100) { random_select array }.uniq.sort == array #=> true 
1

您是否嘗試過使用sample

def random_select(array) 
    array.sample 
end 

選擇一個隨機元素或正從陣列隨機元素。

通過在 數組中使用隨機和唯一索引來選擇元素,以確保元素不會自行重複,除非 數組已包含重複元素。

如果數組爲空,則第一種形式返回nil,第二種形式 返回空數組。

可選的rng參數將用作隨機數生成器。