From 46becb3b631dd8b326e46662f77877252b117ed2 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Tue, 28 Jun 2022 17:09:04 +0000 Subject: [PATCH] sortBy --- kiss/src/kiss/Kiss.hx | 1 + kiss/src/kiss/Prelude.hx | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/kiss/src/kiss/Kiss.hx b/kiss/src/kiss/Kiss.hx index 7895f592..821b0006 100644 --- a/kiss/src/kiss/Kiss.hx +++ b/kiss/src/kiss/Kiss.hx @@ -87,6 +87,7 @@ class Kiss { // TODO some of these probably won't conflict, and could be passed as functions for a number of reasons "print" => Symbol("Prelude.print"), "sort" => Symbol("Prelude.sort"), + "sortBy" => Symbol("Prelude.sortBy"), "groups" => Symbol("Prelude.groups"), "pairs" => Symbol("Prelude.pairs"), "reverse" => Symbol("Prelude.reverse"), diff --git a/kiss/src/kiss/Prelude.hx b/kiss/src/kiss/Prelude.hx index 1cb1b06d..403f9514 100644 --- a/kiss/src/kiss/Prelude.hx +++ b/kiss/src/kiss/Prelude.hx @@ -196,6 +196,15 @@ class Prelude { return sorted; } + public static function sortBy(a:Array, index:T->U, ?comp:(U, U) -> Int):kiss.List { + if (comp == null) + comp = Reflect.compare; + + return sort(a, (v1, v2) -> { + return comp(index(v1), index(v2)); + }); + } + public static function groups(a:Array, size, extraHandling = Throw):kiss.List> { var numFullGroups = Math.floor(a.length / size); var fullGroups = [