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 = [