On Saturday, 9 October 2021 at 23:58:14 UTC, Greg Strong wrote:
> This should be a simple question, but I'm having difficult finding an answer. How do I filter some elements of an array into a new array? The filter! function returns a range, but I can't seems to assign it to a new array. I get:
Cannot implicitly convert expression of type FilterResult!(__lambda10 ...
Nothing I try to construct a new array seems to work.
std.array.array does this:
https://dlang.org/phobos/std_array.html
and some other functions in that module are similar.
A value of output ranges like FilterResult is that you can decide how or whether to allocate an array of the results: you could allocate a new array with .array
or you could consume the results as they come, or you could out pick a particular result, or you could populate a static array...
int example(R)(R range) @nogc {
import std.range : take, enumerate;
int[5] ints;
foreach (size_t i, n; range.enumerate.take(ints.length))
ints[i] = n;
// just to do something with the array
int sum;
foreach (n; ints)
sum += n;
return sum;
}
unittest {
import std.range : iota;
import std.algorithm : filter;
assert(20 == iota(100).filter!"a%2==0".example);
}