1

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

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

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

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

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

4

2 回答 2

8

与其尝试生成唯一随机数列表,不如生成一系列数字并打乱该列表?

于 2012-11-03T23:50:19.363 回答
0

我建议使用哈希而不是数组,因为比较 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,则与使用数组相比,消耗的时间非常不同。

于 2012-11-04T01:04:40.590 回答