diff --git a/basis/sorting/slots/slots-tests.factor b/basis/sorting/slots/slots-tests.factor index 2b56d5dfe8..72b6481c45 100644 --- a/basis/sorting/slots/slots-tests.factor +++ b/basis/sorting/slots/slots-tests.factor @@ -93,3 +93,8 @@ TUPLE: tuple2 d ; { { 3 { 2 4 } } { 1 { 2 0 0 0 } } { 0 { 1 } } { 1 { 1 } } } { length-test<=> <=> } sort-values-by ] unit-test + +{ { { "apples" 1 } { "bananas" 2 } { "cherries" 3 } } } [ + H{ { "apples" 1 } { "bananas" 2 } { "cherries" 3 } } + { { sequences:length <=> } } sort-keys-by +] unit-test diff --git a/basis/sorting/slots/slots.factor b/basis/sorting/slots/slots.factor index 2ef95afa1b..05333935d1 100644 --- a/basis/sorting/slots/slots.factor +++ b/basis/sorting/slots/slots.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2009 Slava Pestov, Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays fry kernel math.order sequences sorting ; +USING: arrays assocs fry kernel math.order sequences sorting ; IN: sorting.slots : execute-comparator ( obj1 obj2 word -- <=>/f ) @@ -23,6 +23,8 @@ IN: sorting.slots : sort-by ( seq sort-specs -- seq' ) [ ] sort-by-with ; -: sort-keys-by ( seq sort-seq -- seq' ) [ first ] sort-by-with ; +: sort-keys-by ( alist sort-seq -- seq' ) + [ >alist ] dip [ first ] sort-by-with ; -: sort-values-by ( seq sort-seq -- seq' ) [ second ] sort-by-with ; +: sort-values-by ( seq sort-seq -- seq' ) + [ >alist ] dip [ second ] sort-by-with ;