0から51の中から重複のない5つをランダムに選ぶにはどうしますか

ruby リファレンスマニュアル FAQ 読む - たばさの - Rubyist


を見て、やってみた。

結果

def getNoneRepeatNumbers(qt,max_num)
  (1..qt).inject([]) do |a, i|
    rand_num = rand(max_num + 1)
    while a.include?(rand_num)
      rand_num = rand(max_num + 1)
    end
    a << rand_num
  end
end

p getNoneRepeatNumbers(5,51)

とりあえず

0から51の中から5つをランダムに
というのは簡単に書けた。

(1..5).inject([]) {|a, i| a << rand(52)}

でも

重複のない
というすっきりした書き方が思いつかない。
再帰を使えばよさそうな気がするが結局whileで書いてしまった。


解答はこちら
FAQ::組み込みライブラリ - Rubyリファレンスマニュアル