我對這段代碼有這個小問題:我想以數組的形式將此參數傳遞給此random_select
方法,並且我想要返回一個隨機索引。我知道,由於範圍操作員的工作方式,它不起作用,爲此我們有sample
方法。但任何人都可以解釋我爲什麼這個代碼返回nil
作爲它的一個隨機值?使用範圍運算符+數組索引的蘭德方法
def random_select(array)
array[rand(array[0]..array[4])]
end
p random_select([1,2,3,4,5])
我對這段代碼有這個小問題:我想以數組的形式將此參數傳遞給此random_select
方法,並且我想要返回一個隨機索引。我知道,由於範圍操作員的工作方式,它不起作用,爲此我們有sample
方法。但任何人都可以解釋我爲什麼這個代碼返回nil
作爲它的一個隨機值?使用範圍運算符+數組索引的蘭德方法
def random_select(array)
array[rand(array[0]..array[4])]
end
p random_select([1,2,3,4,5])
因爲你的範圍訪問數組值,而不是數組索引:
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
您是否嘗試過使用sample
?
def random_select(array)
array.sample
end
選擇一個隨機元素或正從陣列隨機元素。
通過在 數組中使用隨機和唯一索引來選擇元素,以確保元素不會自行重複,除非 數組已包含重複元素。
如果數組爲空,則第一種形式返回nil,第二種形式 返回空數組。
可選的rng參數將用作隨機數生成器。