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.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 をテストすると、配列を使用した場合と比較して、消費される時間は大きく異なります。

于 2012-11-04T01:04:40.590 に答える