(0..50).to_a.sort{ rand() - 0.5 }[0..x]
(0..50).to_a
可以用任何数组替换。
0 是“最小值”,50 是“最大值”
x 是“我想要多少个值”
当然,x 不可能大于 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 年 9 月最初回答这个问题时,Array#shuffle http://www.ruby-doc.org/core-2.1.5/Array.html#method-i-shuffle要么不可用,要么我还不知道,因此近似值Array#sort http://www.ruby-doc.org/core-2.1.5/Array.html#method-i-sort
因此,出现了一系列对此进行修改的建议。
So:
.sort{ rand() - 0.5 }
在现代 Ruby 实现中可以使用以下方式更好、更短地表达
.shuffle
此外,
[0..x]
可以更明显地写成Array#take http://www.ruby-doc.org/core-2.1.5/Array.html#method-i-take as:
.take(x)
因此,在现代 ruby 上生成随机数序列的最简单方法是:
(0..50).to_a.shuffle.take(x)