Predicate for determining where to split. The earlier element in the source range is always given as the first argument.
A forward range to be split.
a range of subranges of r, split such that within a given subrange, calling pred with any pair of adjacent elements as arguments returns false. Copying the range currently has reference semantics, but this may change in the future.
import std.algorithm.comparison : equal; import std.range : dropExactly; auto source = [4, 3, 2, 11, 0, -3, -3, 5, 3, 0]; auto result1 = source.splitWhen!((a,b) => a <= b); assert(result1.save.equal!equal([ [4, 3, 2], [11, 0, -3], [-3], [5, 3, 0] ])); //splitWhen, like chunkBy, is currently a reference range (this may change //in future). Remember to call `save` when appropriate. auto result2 = result1.dropExactly(2); assert(result1.save.equal!equal([ [-3], [5, 3, 0] ]));
splitter, which uses elements as splitters instead of element-to-element relations.
Splits a forward range into subranges in places determined by a binary predicate.
When iterating, one element of r is compared with pred to the next element. If pred return true, a new subrange is started for the next element. Otherwise, they are part of the same subrange.
If the elements are compared with an inequality (!=) operator, consider chunkBy instead, as it's likely faster to execute.