Too complicated code for generating a random string?
Jens Mueller
jens.k.mueller at gmx.de
Sat Feb 23 05:02:24 PST 2013
Ali Çehreli wrote:
> On 02/22/2013 04:23 PM, Jens Mueller wrote:
> >Hi,
> >
> >I'd like to sample with replacement. But found no simple way.
> >In particular I want to generate a random string of given letters, say
> >std.ascii.letters.
> >
> >Anybody a simpler version than
> >
> >auto randomString = repeat('a').take(10).map!(c => randomSample(letters, 1, letters.length))().joiner();
> >
> >?
> >
> >Jens
>
> Here is another way:
>
> import std.stdio;
> import std.algorithm;
> import std.ascii;
> import std.random;
> import std.range;
>
> auto pickOne(R)(R range)
> // insert template constraints here ... :)
> {
> return range[uniform(0, range.length)];
> }
>
> void main()
> {
> writeln(iota(10).map!((_) => pickOne(letters)));
> }
I think this version also looks good:
void main()
{
auto randomLetter = () => randomSample(letters, 1, letters.length).front;
writeln(iota(10).map!(_ => randomLetter()));
}
Which makes me think Phobos is convenient enough in this use case. Just
finding a simple way to use it can be a burden. It should be improved
with better documentation.
Jens
More information about the Digitalmars-d
mailing list