You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
24 lines
861 B
24 lines
861 B
extension IndexedMap<T> on Iterable<T> { |
|
Iterable<O> indexedMap<O>(O Function(int, T) toElement) { |
|
int index = 0; |
|
return map((e) => toElement(index++, e)); |
|
} |
|
|
|
Iterable<O> zipWith<O>(Iterable<Iterable<T>> otherIterables, O Function(List<T>) toElement, {bool allowUnequalLengths = false}) sync* { |
|
final iterators = [this].followedBy(otherIterables).map((e) => e.iterator).toList(); |
|
while (true) { |
|
int ends = iterators.map((it) => it.moveNext()).where((e) => e == false).length; |
|
if (ends != 0) { |
|
// At least one iterator finished |
|
if (ends != iterators.length && !allowUnequalLengths) { |
|
throw Exception('While zipping, $ends iterators ended early'); |
|
} |
|
else { |
|
return; |
|
} |
|
} |
|
|
|
yield toElement(iterators.map((it) => it.current).toList(growable: false)); |
|
} |
|
} |
|
} |