生成範圍中的唯一整數這看起來應該很簡單,但我無法在任何地方找到答案!使用Faker gem
我正在Rails中構建一個sample_data rake文件來使用Faker gem來填充我的db。 (儘管我不認爲我需要這個gem來生成整數)
某些字段需要是一個設置範圍內的整數,但每個字段必須是唯一的。例如:
10.times do |a|
a.special_number = rand(1..10)
end
作品很好,除了一個事實,即數字不是唯一的了。
生成範圍中的唯一整數這看起來應該很簡單,但我無法在任何地方找到答案!使用Faker gem
我正在Rails中構建一個sample_data rake文件來使用Faker gem來填充我的db。 (儘管我不認爲我需要這個gem來生成整數)
某些字段需要是一個設置範圍內的整數,但每個字段必須是唯一的。例如:
10.times do |a|
a.special_number = rand(1..10)
end
作品很好,除了一個事實,即數字不是唯一的了。
,而不是試圖生成唯一的隨機數的列表,你爲什麼不產生一個範圍數字和洗牌的列表?
同樣的結帳這個類似的帖子: http://stackoverflow.com/questions/1996864/generate-n-unique-random-integers-in-ruby-rails?rq=1 –
這可能工作得很好..如何看待代碼?提前致謝! – SethS
看看第二個答案'(1..max).sort_by {rand}' –
我會建議使用散列而不是數組,因爲在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,則與使用數組相比,消耗的時間非常不同。
可能重複[如何在Ruby中生成n個唯一隨機數列表?](http://stackoverflow.com/questions/119107/how-do-i-generate-a-list-of-n -unique-random-numbers-in-ruby) – Thilo