質問

私は railstutorial を経由すると
('a'..'z').to_a.shuffle[0..7].join
それは次のようにランダムな7文字のドメイン名を作成します:

 hwpcbmze.heroku.com
 seyjhflo.heroku.com
 jhyicevg.heroku.com

私はグルーヴィーに1ライナーを変換してみましたが、私はのみを思い付くことができます:

def range = ('a'..'z')
def tempList = new ArrayList (range)
Collections.shuffle(tempList)
println tempList[0..7].join()+".heroku.com"
上記の改善と1つのライナーに行うことができますか?私は

により、上記のコードは短く作ってみました
println Collections.shuffle(new ArrayList ( ('a'..'z') ))[0..7].join()+".heroku.com"

しかし、どうやらCollections.shuffle(new ArrayList ( ('a'..'z') ))は、A null

役に立ちましたか?

解決

シャッフルを持っていない内蔵の長さにほとんど追加されますが、ここでそれをやるその1つのライナーです。

('a'..'z').toList().sort{new Random().nextInt()}[1..7].join()+".heroku.com"
Collections.shuffleは、インプレースshuffleを行いますが、何も返さないので、

ユアーズ動作しません。 1つのライナーとして、あなたがこれを行う必要があるだろうと使用するには:

('a'..'z').toList().with{Collections.shuffle(it); it[1..7].join()+".heroku.com"}

他のヒント

これは、ワンライナーではなく、これを行うには、別のGroovyの方法は、Stringにシャッフル方法を追加することです...

String.metaClass.shuffle = { range ->
def r = new Random()
delegate.toList().sort { r.nextInt() }.join()[range]}

そして、あなたが何かを持っている非常にルビーのような...

('a'..'z').join().shuffle(0..7)+'.heroku.com'

これは私の試みです。これは、ワンライナーですが、文字の繰り返しを可能にします。それは、ランダムなドメイン名に適した出力を生成してもそれは、シャッフルを行いません。

私は、再帰的な匿名のクロージャの一例として、それを掲示しています:

{ i -> i > 0 ? "${(97 + new Random().nextInt(26) as char)}" + call(i-1) : "" }.call(7) + ".heroku.com"
scroll top