On Sunday, 29 January 2017 at 23:42:40 UTC, Jordan Wilson wrote:
On Sunday, 29 January 2017 at 21:41:57 UTC, albert-j wrote:
On Saturday, 28 January 2017 at 11:54:58 UTC, cym13 wrote:
[...]

I am trying to wrap my head around lazy evaluation during filtering/mapping, but there's something I don't understand. I want to create an array, square some elements, remove some elements from original array and add the squared ones to the original array:

[...]

You need to do something like this:
auto arrMap = arr.filter!(x => x > 5).map!(x => x^^2).array;

It's because arrMap is lazy evaluated.

Specifically:
arr ~= arrMap.array;
will cause arrMap to be evaluated again using whatever arr is.

So instead of:
auto arrMap = arr.filter!(x => x > 5).map!(x => x^^2);
// mutate arr
arr ~= arrMap.array;

you would want:
auto arrMap = arr.filter!(x => x > 5).map!(x => x^^2).array;
// mutate arr
arr ~= arrMap;

Reply via email to