这似乎应该很简单,但我无法在任何地方找到答案!
我正在Rails中构建一个sample_data rake文件,以使用Faker gem填充我的数据库。 (虽然我认为我不需要那个宝石来生成整数)
某些字段必须是设定范围内的整数,但每个字段必须是唯一的。例如:
10.times do |a|
a.special_number = rand(1..10)
end
除了数字不是唯一的事实外,效果很好......
答案 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,与使用数组相比,消耗的时间是非常不同的。