problem with multiwayMerge and chunkBy
Nicholas Wilson
iamthewilsonator at hotmail.com
Sun Nov 5 22:47:10 UTC 2017
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.
More information about the Digitalmars-d-learn
mailing list