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