(0..50).to_a.sort{ rand() - 0.5 }[0..x]
(0..50).to_a
может быть заменен любым массивом. 0 "minvalue", 50 "макс. значение" x, "сколько значений я хочу выйти", конечно, ее невозможное для x, которому разрешат быть больше, чем макс. минута:)
В расширении того, как это работает
(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
был или не доступен или не уже известный мне, следовательно приближение в [1 112]Array#sort
И существует заграждение предложенных редактирований к этому в результате.
Так:
.sort{ rand() - 0.5 }
Может быть лучше, и короче выразил на современных рубиновых реализациях с помощью [1 121]
.shuffle
Кроме того,
[0..x]
, Может быть, более очевидно, записан с [1 113]
Array#take
как:.take(x)
Таким образом, самый легкий способ произвести последовательность случайных чисел на современном рубине:
(0..50).to_a.shuffle.take(x)
Эту проблему можно обойти, передав -n в ssh вместо -t -t. Из справочной страницы ssh:
-n Redirects stdin from /dev/null (actually, prevents reading from
stdin). This must be used when ssh is run in the background. A
common trick is to use this to run X11 programs on a remote
machine. For example, ssh -n shadows.cs.hut.fi emacs & will
start an emacs on shadows.cs.hut.fi, and the X11 connection will
be automatically forwarded over an encrypted channel. The ssh
program will be put in the background. (This does not work if
ssh needs to ask for a password or passphrase; see also the -f
option.)
Это еще один способ решения проблемы, когда stdin берется из вызывающего процесса и передается ssh, однако я хотел бы понять, как избежать предупреждения при использовании -t -t.