这似乎应该很简单,但我在任何地方都找不到答案!
我正在 Rails 中构建一个 sample_data rake 文件,以使用 Faker gem 填充我的数据库。(虽然我认为我不需要那个宝石来生成整数)
某些字段需要是设定范围内的整数,但每个字段都必须是唯一的。例如:
10.times do |a|
a.special_number = rand(1..10)
end
效果很好,除了数字不是唯一的......
这似乎应该很简单,但我在任何地方都找不到答案!
我正在 Rails 中构建一个 sample_data rake 文件,以使用 Faker gem 填充我的数据库。(虽然我认为我不需要那个宝石来生成整数)
某些字段需要是设定范围内的整数,但每个字段都必须是唯一的。例如:
10.times do |a|
a.special_number = rand(1..10)
end
效果很好,除了数字不是唯一的......
与其尝试生成唯一随机数列表,不如生成一系列数字并打乱该列表?
我建议使用哈希而不是数组,因为比较 Array 中的数字的复杂性是 array.length 而在 hash 中它是 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,则与使用数组相比,消耗的时间非常不同。