diff --git a/.changeset/clean-meals-pull.md b/.changeset/clean-meals-pull.md new file mode 100644 index 0000000000..158c6d5269 --- /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 17ce3b9663..6867785277 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]) ) /**