使用指定顺序的.sample

时间:2014-11-27 14:50:43

标签: ruby-on-rails ruby arrays ruby-on-rails-4

我设置了一个非常简单的种子文件来填充模型

year_group_array = ['Reception', 'Year 1', 'Year 2', 'Year 3', 'Year 4', 'Year 5', 'Year 6']

6.times { 
  year_group = YearGroup.create({
    name: year_group_array.sample
  })
}

这将确保数组中的所有项都被填充但不是以任何顺序填充(理想情况下我希望条目按它们在数组中出现的顺序)并且我也很难编码循环的次数要运行,我怎么能让它更具动态性,以便在数组中没有剩余项目时停止?

我只是想让这个表现更好一些,所以如果我将来向数组添加任何东西,我就不必计算数组中的项目数并设置迭代值

2 个答案:

答案 0 :(得分:1)

将原始数组值绑定到输出的一种方法是枚举原始数组。

year_group_array = ['Reception', 'Year 1', 'Year 2', 'Year 3', 'Year 4', 'Year 5', 'Year 6']

year_group_array[0..5].each { |sample| YearGroup.create(name: sample) }

如果你必须使用随机值:

LIMIT = 6
source = year_group_array[0..LIMIT].dup
year_group_array[0..LIMIT].each { |sample| YearGroup.create(name: source.delete(rand(LIMIT))) }

答案 1 :(得分:0)

我相信这应该是答案。一个非常简单的方法来自我。

year_group_array = ['Reception', 'Year 1', 'Year 2', 'Year 3', 'Year 4', 'Year 5', 'Year 6']

year_group_array.shuffle.each do |year|  
  year_group = YearGroup.create({
    name: year
  })
end

所以Array #shuffle会做到这一点。它将随机化集合中对象的索引/位置,并且Collection#将继续将它们收集到一个块中并按顺序创建记录并继续添加记录,除非创建了所有记录。

相关问题