factor/extra/sorting/extras/extras.factor

12 lines
406 B
Factor

USING: assocs kernel sequences sequences.private sorting ;
IN: sorting.extras
: argsort ( seq quot: ( obj1 obj2 -- <=> ) -- sortedseq )
[ 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 [ first-unsafe ] sort-with
[ second-unsafe ] map ; inline