fill array using a lambda function

Simen Kjaeraas simen.kjaras at gmail.com
Thu Oct 10 10:26:57 PDT 2013


On 2013-10-10, 16:04, bearophile wrote:

> dominic jones:
>
>> I want to fill an array with random numbers without resorting to loops,  
>> i.e. by doing something like the following, if it were possible:
>>
>>   fill!(function double(){ return uniform(0.0, 1.0);})(x[]);
>>
>> Is there a simple way of doing this?
>
> Generally it's a good idea to use only pure functions inside the higher  
> order functions of Phobos. using impure functions like uniforms could  
> lead to bugs or performance problems.
>
> This is a way to do it (untested):
>
> x.copy(x.length.iota.map!(_ => uniform(0.0, 1.0));

You've got the order wrong - copy takes first the source, then the target.
Also, is it faster to use .length.iota than simply mapping on x?
My solution:

x.map!(_=>uniform(0.0, 1.0)).copy(x);

-- 
Simen


More information about the Digitalmars-d-learn mailing list