📅  最后修改于: 2023-12-03 15:19:41.983000             🧑  作者: Mango
在 Ruby on Rails 中,我们常常需要从一个数组中随机选择一个或多个元素。这在游戏开发、随机生成数据等方面非常有用。本文将介绍几种从数组中选择任意 n 元素的方法。
Ruby 的 Array 类中有一个叫做 sample
的方法,可以随机从数组中选择一个元素。如果想选择多个元素,可以在方法中传入一个数字作为参数,表示要选择的元素个数。示例如下:
array = ["a", "b", "c", "d", "e"]
p array.sample #=> "c"
p array.sample(2) #=> ["b", "d"]
当然,我们也可以在 Rails 应用中使用这个方法。例如,想要从数据库中的文章随机选择三篇:
@articles = Article.all.sample(3)
shuffle
方法可以将数组中的元素打乱,使它们随机排序。如果需要随机选择 n 个元素,我们可以先将数组打乱,再取前 n 个。示例如下:
array = ["a", "b", "c", "d", "e"]
p array.shuffle[0..1] #=> ["e", "a"]
在 Rails 应用中,我们可以将它用作随机展示一些产品或文章。
@products = Product.all.shuffle[0..2]
还有一种方法是使用样本空间(sample space)。样本空间是一个由所有可能的结果组成的集合。以掷骰子为例,掷骰子的样本空间是 {1, 2, 3, 4, 5, 6}。如果我们想从这个样本空间中随机选择 n 个元素,可以生成一个随机数(即掷骰子),如果这个数没有出现过,就将其加入到结果集中。
def random_sample(array, n)
sample_space = array.length
result = []
n.times do
index = rand(sample_space)
result << array[index]
array[index] = array[sample_space - 1]
sample_space -= 1
end
return result
end
array = ["a", "b", "c", "d", "e"]
p random_sample(array, 2) #=> ["d", "c"]
这个方法虽然有些繁琐,但它有一个好处:可以很容易地从一个无限大的序列中随机选择 n 个元素。
以上三种方法都是从数组中随机选择 n 个元素的有效方法。对于简单的应用场景,使用 sample
方法或 shuffle
方法非常方便。对于更复杂的场景,使用样本空间可以实现更复杂的随机选择算法。