more efficient hash-each
parent
68d034d7eb
commit
240eb8b626
|
@ -111,11 +111,9 @@ IN: hashtables
|
|||
[ remove-assoc ] set-hash* ;
|
||||
|
||||
: hash-clear ( hash -- )
|
||||
#! Remove all entries from a hashtable.
|
||||
0 over set-hash-size [ f -rot set-hash-bucket ] each-bucket ;
|
||||
|
||||
: buckets>list ( hash -- list )
|
||||
#! Push a list of key/value pairs in a hashtable.
|
||||
hash-array >list ;
|
||||
|
||||
: alist>hash ( alist -- hash )
|
||||
|
@ -123,16 +121,13 @@ IN: hashtables
|
|||
[ unswons pick set-hash ] each ;
|
||||
|
||||
: hash-keys ( hash -- list )
|
||||
#! Push a list of keys in a hashtable.
|
||||
hash>alist [ car ] map ;
|
||||
|
||||
: hash-values ( hash -- alist )
|
||||
#! Push a list of values in a hashtable.
|
||||
hash>alist [ cdr ] map ;
|
||||
|
||||
: hash-each ( hash code -- )
|
||||
#! Apply the code to each key/value pair of the hashtable.
|
||||
>r hash>alist r> each ; inline
|
||||
: hash-each ( hash quot -- )
|
||||
swap hash-array [ swap each ] each-with ; inline
|
||||
|
||||
: hash-subset ( hash quot -- hash | quot: [[ k v ]] -- ? )
|
||||
>r hash>alist r> subset alist>hash ;
|
||||
|
|
|
@ -119,3 +119,13 @@ f 100000000000000000000000000 "testhash" get set-hash
|
|||
10 [ f f "f-hash-test" get set-hash ] times
|
||||
|
||||
[ 1 ] [ "f-hash-test" get hash-size ] unit-test
|
||||
|
||||
[ 21 ] [
|
||||
0 {{
|
||||
[[ 1 2 ]]
|
||||
[[ 3 4 ]]
|
||||
[[ 5 6 ]]
|
||||
}} [
|
||||
uncons + +
|
||||
] hash-each
|
||||
] unit-test
|
||||
|
|
Loading…
Reference in New Issue