tdrk's diary

とある情報系大学生。主には自分のための備忘録...になる予定

【ruby】ランダムな文字列を生成

指定した長さのランダムな文字列を作りたいと思ったときに、
「Array#sample」を使ってみたら思い通りのものが得られなかったので、
その時の( ..)φメモメモ

得たい文字列は"0"または"1"をランダムに並べた文字列。
次のようにArray#sampleを使うと、"0"を1回、"1"を1回ランダムな順序で並べた文字列しか得られない。

length = 4 # 汎用化のために、指定長さを変数に格納
[*0..1].sample(length).join
# => "10" # 出力例

つまり、Array#sample では、ある要素を1回ずつしかとってこない。
しかも、生成できる文字列は最長でArrayのサイズまでなので、Arrayのサイズを超えた長さを指定してもそのサイズの文字列しか生成できない。

Array#sampleでは、"0011"みたいな文字列は生成できない。。。(´・ω・`)

ということで、調べる(´・ω・`)
その結果、"0011"みたいな文字列をランダムで生成するには次のように書けばOK!

length = 4
Array.new(length){[*0..1].sample}.join
# => "0011" # 出力例


(´・ω・`)「なるほどなぁ。。。」


ちなみに、もっと一般的にアルファベットとかも使う場合は次で。

length = 4
Array.new(length){[*:a..:z, *:A..:Z, *0..1].sample}.join
# => "PdgH" # 出力例