1
0
This commit is contained in:
2024-05-18 15:07:08 +02:00
parent 8c6693ad98
commit 654151e06e
5 changed files with 69 additions and 58 deletions

View File

@@ -7,7 +7,7 @@ import { AsyncRandomOptions } from "../random/types.js";
import { selectionSorter } from "../sorting.js";
import { Sequence } from "../sync/types.js";
import { MaybeAsyncConverter, MaybeAsyncPredicate, MaybeAsyncEquater, MaybeAsyncBiConverter, MaybeAsyncAccumulator, MaybeAsyncComparer, MaybeAsyncAction, MaybePromiseLike, MaybeAsyncGenerator, MaybeAsyncSequence } from "../types.js";
import { strictEquals, identity, operatorCompare, asAsyncGenerator, defaultArrayComparer, combineAsyncComparers } from "../utils.js";
import { strictEquals, identity, operatorCompare, defaultArrayComparer, combineAsyncComparers, asAsyncIterable } from "../utils.js";
import { array, empty, wrap } from "./index.js";
import { AsyncSequence, GroupedAsyncSequence, OrderedAsyncSequence } from "./types.js";
@@ -1467,7 +1467,7 @@ class SkipWhileAsyncSequence<T> extends BaseAsyncSequence<T> {
break;
}
yield* asAsyncGenerator(iterator);
yield* asAsyncIterable(iterator);
}
}
@@ -1504,7 +1504,7 @@ class SkipLastAsyncSequence<T> extends BaseAsyncSequence<T> {
i = 0;
for await (const obj of asAsyncGenerator(iterator)) {
for await (const obj of asAsyncIterable(iterator)) {
yield buffer[i];
buffer[i] = obj;
i = (i + 1) % this.#n;
@@ -1540,7 +1540,7 @@ class SkipAsyncSequence<T> extends BaseAsyncSequence<T> {
i++;
} while (i < this.#n);
yield* asAsyncGenerator(iterator);
yield* asAsyncIterable(iterator);
}
}
@@ -1705,23 +1705,17 @@ class PrependAsyncSequence<T> extends BaseAsyncSequence<T> {
}
}
class PeekAsyncSequence<T> extends BaseAsyncSequence<T> {
readonly #sequence: AsyncSequence<T>;
class PeekAsyncSequence<T> extends DelegatedAsyncSequence<T> {
readonly #action: MaybeAsyncAction<T>;
constructor(sequence: AsyncSequence<T>, action: MaybeAsyncAction<T>) {
super();
super(sequence);
this.#sequence = sequence;
this.#action = action;
}
override async nonEnumeratedCount() {
return await this.#sequence.nonEnumeratedCount();
}
override async *iterator() {
for await (const obj of this.#sequence) {
for await (const obj of this.sequence) {
await this.#action(obj);
yield obj;
}
@@ -1995,13 +1989,15 @@ class GroupByAsyncSequence<TElement, TKey, TResult> extends BaseAsyncSequence<Gr
for await (const obj of this.#sequence) {
const key = await this.#keySelector(obj);
let grouping = await groupings.get(key);
const value = await this.#elementSelector(obj);
if (!grouping) {
await groupings.set(key, grouping = []);
const grouping = await groupings.get(key);
if (grouping) {
grouping.push(value);
} else {
await groupings.set(key, [value]);
}
grouping.push(await this.#elementSelector(obj));
}
for (const entry of groupings) {