From baa7f3b31f3686dd30a70a3a32566c3097068e5d Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 20 Aug 2022 17:50:04 -0400 Subject: [PATCH] assocs.extras: add intersect-keys-as and unit tests --- extra/assocs/extras/extras-tests.factor | 9 +++++++++ extra/assocs/extras/extras.factor | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/extra/assocs/extras/extras-tests.factor b/extra/assocs/extras/extras-tests.factor index c8233c6d25..cf7ce6ce37 100644 --- a/extra/assocs/extras/extras-tests.factor +++ b/extra/assocs/extras/extras-tests.factor @@ -296,3 +296,12 @@ USING: arrays assocs.extras kernel math math.order sequences tools.test ; [ [ dup 1 + 2array ] dip ] collect-assoc-by-multi ] unit-test +{ H{ { 1 2 } { 3 4 } } } [ + H{ { 1 2 } { 3 4 } { 5 6 } } + { 1 3 } intersect-keys +] unit-test + +{ { { 1 2 } { 3 4 } } } [ + H{ { 1 2 } { 3 4 } { 5 6 } } + { 1 3 } { } intersect-keys-as +] unit-test diff --git a/extra/assocs/extras/extras.factor b/extra/assocs/extras/extras.factor index 8aee7d6d9d..7073a07438 100644 --- a/extra/assocs/extras/extras.factor +++ b/extra/assocs/extras/extras.factor @@ -217,8 +217,11 @@ PRIVATE> : flatten-values ( assoc -- assoc' ) dup any-multi-value? [ expand-values-set-at flatten-values ] when ; +: intersect-keys-as ( assoc seq exemplar -- elts ) + [ [ of ] with ] dip zip-with-as sift-values ; inline + : intersect-keys ( assoc seq -- elts ) - [ of ] with zip-with sift-values ; inline + over intersect-keys-as ; inline : values-of ( assoc seq -- seq' ) [ of ] with map ; inline -- 2.34.1