On Wednesday, 17 February 2021 at 11:38:45 UTC, Rumbu wrote:
On Wednesday, 17 February 2021 at 10:15:10 UTC, Mitacha wrote:
it'll use empty string as first element in range.
BTW perheps you could use `joinner` instead of this `fold` to
join values with ",".
Thanks for that. I thought to joiner too, but it doesn't work.
I need fold to take a list of strings and concatenate them.
Basically I read comma separated keywords from various sources
and i want to iterate through all of them. If you know other
method without the involved allocation of fold...
.map!(a => a.hit.stripLeft("[").strip("]")) //"k1,k2",
"k3,k4" ...
.fold!((a, b) => a ~ "," ~ b)("")
//"k1,k2,k3,k4,..."
.splitter(',') //"k1", "k2",
"k3", "k4", ...,
.map!(a => a.stripLeft("\" '").strip("\" '"))
.filter!(a => a.length && !a.any!(b => b == ' ' || b == '\\' ||
b == '/' || b == ':'))
.array
.sort
.uniq;
If you replace `fold` and `splitter` with this, then it doesn't
allocate:
```
auto fn() @nogc {
return only("k1,k2", "k3,k4")
.map!(x => x.splitter(","))
.joiner;
}
void main() {
auto range = fn();
range.writeln;
}
```