(0..50).to_a.sort{ rand() - 0.5 }[0..x]
(0..50).to_a
можно заменить любым массивом.
0 - это «минимальное значение», 50 - «максимальное значение»
х это "сколько значений я хочу"
конечно, невозможно, чтобы х было разрешено превышать max-min:)
В расширении того, как это работает
(0..5).to_a ==> [0,1,2,3,4,5]
[0,1,2,3,4,5].sort{ -1 } ==> [0, 1, 2, 4, 3, 5] # constant
[0,1,2,3,4,5].sort{ 1 } ==> [5, 3, 0, 4, 2, 1] # constant
[0,1,2,3,4,5].sort{ rand() - 0.5 } ==> [1, 5, 0, 3, 4, 2 ] # random
[1, 5, 0, 3, 4, 2 ][ 0..2 ] ==> [1, 5, 0 ]
Сноска:
Стоит отметить, что на момент первоначального ответа на этот вопрос, сентябрь 2008 г., Array#shuffle
либо не был доступен, либо мне еще не был известен, поэтому приближение в Array#sort
И, как следствие, есть множество предлагаемых изменений в этом.
Итак:
.sort{ rand() - 0.5 }
Может быть лучше и короче выражено в современных реализациях ruby с использованием
.shuffle
Дополнительно
[0..x]
Можно более явно записать с Array#take
как:
.take(x)
Таким образом, самый простой способ создать последовательность случайных чисел на современном рубине:
(0..50).to_a.shuffle.take(x)