splitAfterIndexed method
Splits the elements into chunks after some elements and indices.
Each element and index is checked using test
for whether it should end the current chunk.
If so, the elements since the previous chunk-ending element,
includeing the elemenent that satisfied test
,
are emitted as a list.
Any remaining elements are emitted at the end, whether the last
element should be split after or not.
Example:
var parts = [1, 0, 2, 1, 5, 7, 6, 8, 9]
.splitAfterIndexed((i, v) => i < v);
print(parts); // ([1, 0], [2, 1], [5, 7, 6], [8, 9])
Implementation
Iterable<List<T>> splitAfterIndexed(
bool Function(int index, T element) test) sync* {
var index = 0;
List<T>? chunk;
for (var element in this) {
(chunk ??= []).add(element);
if (test(index++, element)) {
yield chunk;
chunk = null;
}
}
if (chunk != null) yield chunk;
}