現在、「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}
しかし、それはゴミのように見えます。
もっと良い方法を知っている人はいますか?
ベストアンサー1
(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個のランダムな単語文字列を生成し、スペースで結合します。