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 ] } }
|
H{ { 1 [ sq ] } { 2 [ sq ] } }
|
||||||
} [
|
} [
|
||||||
{ { { 1 2 { 1 } { 2 } { 1 1 } } [ sq ] } } flatten-keys
|
{ { { 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
|
] unit-test
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2012 John Benediktsson, Doug Coleman
|
! Copyright (C) 2012 John Benediktsson, Doug Coleman
|
||||||
! See http://factorcode.org/license.txt for BSD license
|
! See http://factorcode.org/license.txt for BSD license
|
||||||
USING: arrays assocs assocs.private fry generalizations kernel
|
USING: arrays assocs assocs.private fry generalizations kernel
|
||||||
math math.statistics sequences sequences.extras ;
|
math math.statistics sequences sequences.extras sets ;
|
||||||
IN: assocs.extras
|
IN: assocs.extras
|
||||||
|
|
||||||
: deep-at ( assoc seq -- value/f )
|
: deep-at ( assoc seq -- value/f )
|
||||||
|
@ -41,6 +41,12 @@ IN: assocs.extras
|
||||||
: reject-values ( assoc quot: ( value -- value' ) -- assoc' )
|
: reject-values ( assoc quot: ( value -- value' ) -- assoc' )
|
||||||
'[ nip @ ] assoc-reject ; inline
|
'[ 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 )
|
: if-assoc-empty ( ..a assoc quot1: ( ..a -- ..b ) quot2: ( ..a assoc -- ..b ) -- ..b )
|
||||||
[ dup assoc-empty? ] [ [ drop ] prepose ] [ ] tri* if ; inline
|
[ dup assoc-empty? ] [ [ drop ] prepose ] [ ] tri* if ; inline
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue