From a1f43287a01b695ca50620651176387c2bd2940b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20BECHER?= Date: Thu, 9 May 2024 16:28:05 +0200 Subject: [PATCH] allow creating RandomPicker from iterable and separately specified length --- src/random.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/random.ts b/src/random.ts index 99e98b3..f693253 100644 --- a/src/random.ts +++ b/src/random.ts @@ -91,20 +91,21 @@ export class RandomPicker { readonly #flags: BitArray; readonly #options: Required>; - public constructor(elements: T[], options?: RandomOptions) { + public constructor(elements: Iterable, length: number, options?: RandomOptions) { this.#elements = elements; - this.#flags = BitArray.create(elements.length); + this.#flags = BitArray.create(length); this.#options = withDefaultOptions(mergeOptions({ predicate: i => this.#flags.get(i) }, options)); this.reset(); } public static from(iterable: Iterable, options?: RandomOptions) { - return new this(asArray(iterable), options); + const arr = asArray(iterable); + return new this(arr, arr.length, options); } public static of(options?: RandomOptions, ...values: T[]) { - return new this(values, options); + return new this(values, values.length, options); } public get state() {