diff --git a/extra/sorting/extras/extras-tests.factor b/extra/sorting/extras/extras-tests.factor index 931ff3ec52..49916e6248 100644 --- a/extra/sorting/extras/extras-tests.factor +++ b/extra/sorting/extras/extras-tests.factor @@ -1,7 +1,9 @@ -USING: kernel math.order sequences tools.test ; +USING: kernel math math.order sequences tools.test ; IN: sorting.extras { { 0 2 1 } } [ { 10 30 20 } [ <=> ] argsort ] unit-test { { 2 0 1 } } [ { "hello" "goodbye" "yo" } [ [ length ] bi@ <=> ] argsort ] unit-test + +{ 1 { 2 3 4 5 } } [ 1 { 1 2 3 4 } [ dupd + ] map-sort ] unit-test diff --git a/extra/sorting/extras/extras.factor b/extra/sorting/extras/extras.factor index 2c329fb0f9..72d2e1574f 100644 --- a/extra/sorting/extras/extras.factor +++ b/extra/sorting/extras/extras.factor @@ -5,3 +5,7 @@ IN: sorting.extras [ dup length iota zip ] dip [ [ first-unsafe ] bi@ ] prepose sort [ second-unsafe ] map! ; inline + +: map-sort ( ... seq quot: ( ... elt -- ... key ) -- ... sortedseq ) + [ map ] curry keep zip [ second-unsafe ] sort-with + [ first-unsafe ] map ; inline