Techioz Blog

Rubyでランダムな文字列を生成する方法

概要

現在、「A」から「Z」までの 8 文字の擬似ランダムな大文字文字列を生成しています。

value = ""; 8.times{value  << (65 + rand(25)).chr}

しかし、これは見た目がきれいではなく、単一のステートメントではないため引数として渡すこともできません。大文字と小文字が混合された文字列 “a” .. “z” と “A” .. “Z” を取得するには、次のように変更しました。

value = ""; 8.times{value << ((rand(2)==1?65:97) + rand(25)).chr}

でもゴミみたいです。

誰かがより良い方法を持っていますか?

解決策

(0...8).map { (65 + rand(26)).chr }.join

私はゴルフに多くの時間を費やしすぎます。

(0...50).map { ('a'..'z').to_a[rand(26)] }.join

そして最後のものはさらに混乱しますが、より柔軟で無駄なサイクルが少なくなります。

o = [('a'..'z'), ('A'..'Z')].map(&:to_a).flatten
string = (0...50).map { o[rand(o.length)] }.join

ランダムなテキストを生成したい場合は、次を使用します。

50.times.map { (0...(rand(10))).map { ('a'..'z').to_a[rand(26)] }.join }.join(" ")

このコードは、単語長が 10 文字未満のランダムな単語列を 50 個生成し、スペースで結合します。