From 79859e71040d8edf1868b8530b90c650f4321eff Mon Sep 17 00:00:00 2001 From: Michael Arnaldi Date: Mon, 2 Sep 2024 22:20:09 +0200 Subject: [PATCH] Optimize Array.sortWith to avoid calling the map function excesively (#3536) --- .changeset/clean-meals-pull.md | 5 +++++ packages/effect/src/Array.ts | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .changeset/clean-meals-pull.md diff --git a/.changeset/clean-meals-pull.md b/.changeset/clean-meals-pull.md new file mode 100644 index 00000000000..158c6d52693 --- /dev/null +++ b/.changeset/clean-meals-pull.md @@ -0,0 +1,5 @@ +--- +"effect": patch +--- + +Optimize Array.sortWith to avoid calling the map function excesively diff --git a/packages/effect/src/Array.ts b/packages/effect/src/Array.ts index 17ce3b9663b..6867785277c 100644 --- a/packages/effect/src/Array.ts +++ b/packages/effect/src/Array.ts @@ -1255,7 +1255,8 @@ export const sortWith: { (self: Iterable, f: (a: A) => B, order: Order.Order): Array } = dual( 3, - (self: Iterable, f: (a: A) => B, order: Order.Order): Array => sort(self, Order.mapInput(order, f)) + (self: Iterable, f: (a: A) => B, order: Order.Order): Array => + Array.from(self).map((a) => [a, f(a)] as const).sort((a, b) => order(a[1], b[1])).map((x) => x[0]) ) /**