2012-11-03 62 views
1

生成範圍中的唯一整數這看起來應該很簡單,但我無法在任何地方找到答案!使用Faker gem

我正在Rails中構建一個sample_data rake文件來使用Faker gem來填充我的db。 (儘管我不認爲我需要這個gem來生成整數)

某些字段需要是一個設置範圍內的整數,但每個字段必須是唯一的。例如:

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

作品很好,除了一個事實,即數字不是唯一的了。

+0

可能重複[如何在Ruby中生成n個唯一隨機數列表?](http://stackoverflow.com/questions/119107/how-do-i-generate-a-list-of-n -unique-random-numbers-in-ruby) – Thilo

回答

8

,而不是試圖生成唯一的隨機數的列表,你爲什麼不產生一個範圍數字和洗牌的列表?

+0

同樣的結帳這個類似的帖子: http://stackoverflow.com/questions/1996864/generate-n-unique-random-integers-in-ruby-rails?rq=1 –

+0

這可能工作得很好..如何看待代碼?提前致謝! – SethS

+0

看看第二個答案'(1..max).sort_by {rand}' –

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,則與使用數組相比,消耗的時間非常不同。