scheme - 如何映射哈希表的值( Racket )

标签 scheme hashtable racket

我想在哈希表中的值上映射一个函数,如下所示:

(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/

相关文章:

scheme - 如何反转格式?

scheme - let-forms 如何评估?

fortran - 将 Fortran 例程作为 Scheme 函数调用

linked-list - SICP 练习 3.13 - 制作周期

caching - 扩展不可变类型(或 : fast cache for immutable types) in OCaml

if-statement - Racket 中的 If 语句

lisp - 解构递归过程 - SICP

hashmap - 哈希表的一些常见示例是什么?

wpf - 使用 Hashtable 作为 DataContext(用于 WPF/XAML 绑定(bind))

lisp - cdr的时间分析