ランダムソート 補足

前回sort_by{ rand }っていうのがでてきたけど間違えてsort_by{ rand n }とかやってしまうと台無しに。

irb(main):001:0> result = Hash.new(0)
=> {}
irb(main):002:0> 1.upto(7000) {result[[0,1,2,3,4,5,6].sort_by{rand 7}[0]] += 1}
=> 1
irb(main):003:0> Array(result).sort.each {|key,val| puts "%d %d" % [key, val]}
0 1535
1 600
2 795
3 1111
4 868
5 757
6 1334
=> [[0, 1535], [1, 600], [2, 795], [3, 1111], [4, 868], [5, 757], [6, 1334]]

容易に同じ数が出るようだと結果が偏ってしまう。
引数なしのrandなら0.0〜1.0のFloatが返るからまず実用上は問題なさげ。