我想在哈希表中的值上映射一个函数,如下所示:
(hash-map add1 (hash "apple" 1 "pear" 2))
=> #hash(("apple" . 2) ("pear" . 3))
有没有库函数可以做到这一点?最好有一个也适用于不可变哈希表。
我看了看PlaneT,但没有看到任何东西。
现在,如果这真的不存在,我会继续写下去。把这个拍成 Racket 的礼节是什么?我只是在 github 上 fork 并将其添加到标准库(和文档!)并提交拉取请求?还是我应该先把它做成一个星球,然后再要求把它搬进来?我很想提供帮助,但我只是不知道什么是“正确”的方法。
最佳答案
有一个哈希映射,但它返回一个列表 [ 1 ]
你必须自己写 hash-map
做你想做的事。
#lang racket
(define (new-hash-map f h)
(make-immutable-hash (hash-map h (λ (k v) (cons k (f v))))))
(new-hash-map add1 (hash "apple" 1 "pear" 2))
; => '#hash(("pear" . 3) ("apple" . 2))
您可能感兴趣的另一种形式是 for/hash [ 2 ]:
#lang racket
(define (new-hash-map2 f h)
(for/hash ([(k v) (in-hash h)]) (values k (f v))))
(new-hash-map2 add1 (hash "apple" 1 "pear" 2))
; => '#hash(("pear" . 3) ("apple" . 2))
如果你觉得这个功能应该包含在 Racket 中,那么补丁是最受欢迎的!最好的贡献方式是在 github 上 fork 并提交 pull request。
关于scheme - 如何映射哈希表的值( Racket ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14632251/