Splits a forward range into subranges in places determined by a binary predicate.
auto splitWhen(alias pred, Range) (
When iterating, one element of
r is compared with
pred to the next
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.
|pred||Predicate for determining where to split. The earlier element in the source range is always given as the first argument.|
|r||A forward range to be split.|
a range of subranges of
r, split such that within a given subrange,
pred with any pair of adjacent elements as arguments returns
Copying the range currently has reference semantics, but this may change in the future.
splitter, which uses elements as splitters instead of element-to-element
.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] ]));