The*_*ire 7 scheme hashtable racket
我想将函数映射到哈希表中的值,如下所示:
(hash-map add1 (hash "apple" 1 "pear" 2))
=> #hash(("apple" . 2) ("pear" . 3))
Run Code Online (Sandbox Code Playgroud)
是否有库函数来执行此操作?有一个人也可以使用不可变的hashetables.
我看着PlaneT,但没有看到任何东西.
现在,如果这确实不存在,我会继续写下来.把这个变成球拍的礼节是什么?我只是将它分叉在github上并将其添加到标准库(和文档!)并提交拉取请求?或者我应该先把它作为一个飞机,然后要求它被移入?我想帮忙,但我不知道什么是'正确'的方式去做.
有一个哈希映射,但它返回一个列表[ 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))
Run Code Online (Sandbox Code Playgroud)
您可能感兴趣的另一种形式是/ 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))
Run Code Online (Sandbox Code Playgroud)
如果您觉得这个功能应该包含在Racket中,那么非常欢迎补丁!贡献的最佳方式是在github上分叉并提交拉取请求.
在这个问题被提出很多年之后,Racket 8.6 添加了hash-map/copy这个功能。它将现有哈希表的键和值传递给返回两个值的映射函数 - 在新返回的表中使用的新键和值。
> (hash-map/copy (hash "apple" 1 "pear" 2) (lambda (k v) (values k (+ v 1))))
'#hash(("apple" . 2) ("pear" . 3))
Run Code Online (Sandbox Code Playgroud)