On 7/21/21 2:17 AM, drug wrote:

>      auto z = zip(x, y)                      // concatenate two ranges
>          .map!(a=>Complex!double(a[0],a[1])) // take the current first
> element of the first range as the real part and the current first
> element of the second range as the imaginary part
>          .array;                             // convert the lazy range
> to a dynamic array, probably you can avoid but this depends on how you
> use it later

One of the *nonexistent* ;) features of D is automatic tuple expansion, which works only in foreach loops. I think it makes the code much more readable in this case:

       Complex!double[] z;

       import std.range;
       import std.algorithm;

       foreach (re, im; zip(x, y)) {
         z ~= complex(re, im);
       }

An alternative is lockstep:

       foreach (re, im; lockstep(x, y)) {
         z ~= complex(re, im);
       }

Ali

Reply via email to