From 46d4b33349e613a66d914413bdea8fd14df1a49c Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Wed, 5 Jul 2017 16:45:23 -0700 Subject: [PATCH] sorting.slots: make sort-keys-by and sort-values-by support hashtables. --- basis/sorting/slots/slots-tests.factor | 5 +++++ basis/sorting/slots/slots.factor | 8 +++++--- 2 files changed, 10 insertions(+), 3 deletions(-) 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 ;