Add hash-replace-keys/ordered.
This commit is contained in:
parent
1490792a19
commit
9175a98a2a
2 changed files with 28 additions and 1 deletions
|
@ -486,6 +486,20 @@ hash table orders them for @racket[hash-map].
|
||||||
(hash->list/ordered #hash((b . 1) (a . 1)))
|
(hash->list/ordered #hash((b . 1) (a . 1)))
|
||||||
]}
|
]}
|
||||||
|
|
||||||
|
@defproc[(hash-replace-keys/ordered [ht (Immutable-HashTable (K1 V))]
|
||||||
|
[new-keys (Listof K2)])
|
||||||
|
(Immutable-HashTable K2 V)]{
|
||||||
|
|
||||||
|
Replaces the keys in @racket[ht] by the keys in @racket[new-keys].
|
||||||
|
|
||||||
|
The key-value pairs of the hash table @racket[ht] are processed in the
|
||||||
|
order produced by @racket[hash-map] with @racket[#:try-order?] set to
|
||||||
|
@racket[#t].
|
||||||
|
|
||||||
|
@ex[
|
||||||
|
(hash-replace-keys/ordered (hash 'a 1 'b 2) '(x y))
|
||||||
|
]}
|
||||||
|
|
||||||
@defproc[(multi-split-at [lists (Listof (Listof a))]
|
@defproc[(multi-split-at [lists (Listof (Listof a))]
|
||||||
[pos Integer])
|
[pos Integer])
|
||||||
(Values (Listof (Listof a)) (Listof (Listof a)))]{
|
(Values (Listof (Listof a)) (Listof (Listof a)))]{
|
||||||
|
|
15
utils.rkt
15
utils.rkt
|
@ -15,7 +15,7 @@
|
||||||
read-org-variable-mapping unorgv read-symbol-list drop-first-last
|
read-org-variable-mapping unorgv read-symbol-list drop-first-last
|
||||||
list-sets->list-strings pretty-print-set pretty-print-set-sets
|
list-sets->list-strings pretty-print-set pretty-print-set-sets
|
||||||
update-vertices/unweighted update-graph dotit collect-by-key
|
update-vertices/unweighted update-graph dotit collect-by-key
|
||||||
collect-by-key/sets ht-values/list->set hash->list/ordered
|
collect-by-key/sets ht-values/list->set hash->list/ordered hash-replace-keys/ordered
|
||||||
multi-split-at lists-transpose append-lists in-random cartesian-product-2/stream
|
multi-split-at lists-transpose append-lists in-random cartesian-product-2/stream
|
||||||
cartesian-product/stream boolean-power boolean-power/stream any->01
|
cartesian-product/stream boolean-power boolean-power/stream any->01
|
||||||
01->boolean
|
01->boolean
|
||||||
|
@ -498,6 +498,19 @@
|
||||||
(check-equal? (hash->list/ordered #hash((b . 1) (a . 1)))
|
(check-equal? (hash->list/ordered #hash((b . 1) (a . 1)))
|
||||||
'((a . 1) (b . 1)))))
|
'((a . 1) (b . 1)))))
|
||||||
|
|
||||||
|
(: hash-replace-keys/ordered (All (K1 K2 V) (-> (Immutable-HashTable K1 V) (Listof K2)
|
||||||
|
(Immutable-HashTable K2 V))))
|
||||||
|
(define (hash-replace-keys/ordered ht new-keys)
|
||||||
|
(make-immutable-hash (map (λ ([new-k : K2] [pair : (Pairof K1 V)])
|
||||||
|
(cons new-k (cdr pair)))
|
||||||
|
new-keys
|
||||||
|
(hash->list/ordered ht))))
|
||||||
|
|
||||||
|
(module+ test
|
||||||
|
(test-case "hash-replace-keys/ordered"
|
||||||
|
(check-equal? (hash-replace-keys/ordered (hash 'a 1 'b 2) '(x y))
|
||||||
|
'#hash((x . 1) (y . 2)))))
|
||||||
|
|
||||||
(: multi-split-at (All (a) (-> (Listof (Listof a)) Integer
|
(: multi-split-at (All (a) (-> (Listof (Listof a)) Integer
|
||||||
(Values (Listof (Listof a)) (Listof (Listof a))))))
|
(Values (Listof (Listof a)) (Listof (Listof a))))))
|
||||||
(define (multi-split-at lists pos)
|
(define (multi-split-at lists pos)
|
||||||
|
|
Loading…
Reference in a new issue