14 lines
505 B
TypeScript
14 lines
505 B
TypeScript
export function* zip<A, B>(a: Iterable<A>, b: Iterable<B>): Generator<[A, B], void, void> {
|
|
const iter_a = a[Symbol.iterator](), iter_b = b[Symbol.iterator]();
|
|
while (true) {
|
|
const next_a = next(iter_a), next_b = next(iter_b);
|
|
if (next_a === null || next_b === null) return;
|
|
yield [next_a, next_b];
|
|
}
|
|
}
|
|
|
|
export function next<T>(iterator: Iterator<T>) {
|
|
const result = iterator.next().value;
|
|
if (result === undefined) return null;
|
|
else return result as T;
|
|
}
|