我对这段代码有一个小问题:我想以数组的形式将参数传递给这个random_select
方法,我希望返回一个随机索引。我知道由于范围运算符的工作方式,它不会工作,出于这种目的,我们有sample
方法。但是,任何人都可以解释我为什么这段代码将nil
作为其随机值之一返回?
def random_select(array)
array[rand(array[0]..array[4])]
end
p random_select([1,2,3,4,5])
答案 0 :(得分: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 :(得分:1)
您是否尝试过使用sample
?
def random_select(array)
array.sample
end
从数组中选择一个随机元素或n个随机元素。
通过使用随机和唯一索引来选择元素 数组,以确保元素不会重复,除非 数组已包含重复元素。
如果数组为空,则第一个表单返回nil,第二个表单返回第二个表单 返回一个空数组。
可选的rng参数将用作随机数生成器。