assocs.extra: Add a word to keep only certain keys in an assoc to the same assoc or to a new one.
parent
87cce0ba6a
commit
ce3049decd
|
@ -54,4 +54,30 @@ USING: assocs.extras kernel math sequences tools.test ;
|
|||
H{ { 1 [ sq ] } { 2 [ sq ] } }
|
||||
} [
|
||||
{ { { 1 2 { 1 } { 2 } { 1 1 } } [ sq ] } } flatten-keys
|
||||
] unit-test
|
||||
|
||||
{
|
||||
H{ { "1" 1 } { "2" 2 } }
|
||||
} [
|
||||
H{ { "1" 1 } { "2" 2 } { "3" 3 } }
|
||||
{ "1" "2" "2" }
|
||||
rekey-new-assoc
|
||||
] unit-test
|
||||
|
||||
{ f } [
|
||||
H{ { "1" 1 } { "2" 2 } { "3" 3 } }
|
||||
[ { "1" "2" "2" } rekey-new-assoc ] keep eq?
|
||||
] unit-test
|
||||
|
||||
{
|
||||
H{ { "1" 1 } { "2" 2 } }
|
||||
} [
|
||||
H{ { "1" 1 } { "2" 2 } { "3" 3 } }
|
||||
{ "1" "2" "2" }
|
||||
rekey-assoc
|
||||
] unit-test
|
||||
|
||||
{ t } [
|
||||
H{ { "1" 1 } { "2" 2 } { "3" 3 } }
|
||||
[ { "1" "2" "2" } rekey-assoc ] keep eq?
|
||||
] unit-test
|
|
@ -1,7 +1,7 @@
|
|||
! Copyright (C) 2012 John Benediktsson, Doug Coleman
|
||||
! See http://factorcode.org/license.txt for BSD license
|
||||
USING: arrays assocs assocs.private fry generalizations kernel
|
||||
math math.statistics sequences sequences.extras ;
|
||||
math math.statistics sequences sequences.extras sets ;
|
||||
IN: assocs.extras
|
||||
|
||||
: deep-at ( assoc seq -- value/f )
|
||||
|
@ -41,6 +41,12 @@ IN: assocs.extras
|
|||
: reject-values ( assoc quot: ( value -- value' ) -- assoc' )
|
||||
'[ nip @ ] assoc-reject ; inline
|
||||
|
||||
: rekey-new-assoc ( assoc keys -- newassoc )
|
||||
[ [ of ] keep swap ] with H{ } map>assoc ; inline
|
||||
|
||||
: rekey-assoc ( assoc keys -- assoc )
|
||||
[ dup keys ] dip diff over [ delete-at ] curry each ; inline
|
||||
|
||||
: if-assoc-empty ( ..a assoc quot1: ( ..a -- ..b ) quot2: ( ..a assoc -- ..b ) -- ..b )
|
||||
[ dup assoc-empty? ] [ [ drop ] prepose ] [ ] tri* if ; inline
|
||||
|
||||
|
|
Loading…
Reference in New Issue