On Sunday, 5 November 2017 at 13:32:57 UTC, Matthew Gamble wrote:
On Sunday, 5 November 2017 at 03:21:06 UTC, Nicholas Wilson
wrote:
On Saturday, 4 November 2017 at 18:57:17 UTC, Matthew Gamble
wrote:
[...]
It should, this looks like a bug somewhere, please file one at
issues.dlang.org/ .
in the mean time
struct Replicate(T)
{
Tuple!(T, uint) e;
@property bool empty() { return e[1] == 0 ; }
@property auto front() {return e[0]; }
void popFront() { --e[1]; }
}
Replicate!T replicate(T)(Tuple!(T, uint) e)
{
return typeof(return)(e);
}
f.multiwayMerge.group!"a == b".map!(replicate).writeln;
Does the same thing provided your predicate is "a == b".
Thanks Nicholas.
I posted the bug as you suggested. My predicate is not quite a
== b, otherwise I would never have needed chunkBy in the first
place. But thanks, I'm pursuing a workaround.
Matt
One thing you might try is instead of using .array to eagerly
evaluate the whole range, eagerly evaluate only a part (say 128
elements) and .joiner them.
import std.range : chunks;
f.multiwayMerge.chunks(128).joiner.chunkBy!(pred).writeln;
since it seems to be the iteration that stuff things up and this
changes it.