使用范围运算符+数组索引的数组上的Rand方法

时间:2014-05-13 16:00:17

标签: ruby arrays random

我对这段代码有一个小问题:我想以数组的形式将参数传递给这个random_select方法,我希望返回一个随机索引。我知道由于范围运算符的工作方式,它不会工作,出于这种目的,我们有sample方法。但是,任何人都可以解释我为什么这段代码将nil作为其随机值之一返回?

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

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

2 个答案:

答案 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参数将用作随机数生成器。