使用Faker gem生成范围内的唯一整数

时间:2012-11-03 23:44:11

标签: ruby-on-rails ruby faker

这似乎应该很简单,但我无法在任何地方找到答案!

我正在Rails中构建一个sample_data rake文件,以使用Faker gem填充我的数据库。 (虽然我认为我不需要那个宝石来生成整数)

某些字段必须是设定范围内的整数,但每个字段必须是唯一的。例如:

10.times do |a|
  a.special_number = rand(1..10)
end

除了数字不是唯一的事实外,效果很好......

2 个答案:

答案 0 :(得分:8)

为什么不生成一系列数字并随机播放该列表,而不是尝试生成唯一随机数列表?

答案 1 :(得分:0)

我建议使用哈希而不是数组,因为比较Array中的数字的复杂性是array.length,而哈希则是1.然后你最终可以将哈希键传输到数组中。

hash = {}   r = [ ]
while hash.length < n
  a = rand(max)
  if !hash_has_key? (a)
     hash(a) = :ok
  end
end

r = hash.keys

如果你测试n = 30000和max = 500000,与使用数组相比,消耗的时间是非常不同的。