Это дает вам 10000 уникальных чисел (строк) с ведущими нулями:
(1..10000).to_a.shuffle!.map{|n| n.to_s.rjust(5,'0')}
Benchmark (с использованием Benchmark.measure ):
user system total real
0.020000 0.000000 0.020000 ( 0.017471)
Я бы, однако, просто использовал:
(1..10000).to_a.shuffle!
Что быстрее:
user system total real
0.000000 0.000000 0.000000 ( 0.001692)
И добавляйте начальные нули при выводе каждого значения. Согласно этому посту Руби shuffle
использует алгоритм Фишера-Йейтса, о котором упоминал Саид.
Обновление:
Таким образом, чтобы ответить на ваш вопрос, вы можете сгенерировать 10000 уникальных случайных чисел в диапазоне [0,99999] со следующим кодом:
(0..99999).to_a.shuffle!.slice(0..9999).map{|n| n.to_s.rjust(5, '0')}
с эталоном:
user system total real
0.020000 0.000000 0.020000 ( 0.026122)