更新存储在哈希表中的列表

时间:2017-11-10 20:55:47

标签: scheme racket

我有一个不可变的哈希表,其中包含一系列列表作为值。我写了一个程序,所以我可以在其中一个列表中添加一个项目,返回一个新的哈希:

(define (update hash key item)
  (hash-set hash
            key
            (cons item
                  (hash-ref hash key)))))

这似乎工作得很好,但感觉很尴尬和冗长。是否有内置的程序可以实现这一目标,或者可能是一种更为惯用的方法来实现同样的目标?

1 个答案:

答案 0 :(得分:2)

这很简单:

(define (update hash key item)
  (hash-update hash key (curry cons item) '()))

说明:

  • hash-update返回 new 哈希,其中包含给定密钥的更新值 - 或者您可以使用hash-update!来就地修改哈希值。
  • hashkey不言自明。
  • 第三个参数是更新程序过程,它接收旧值作为参数,在这种情况下,它是cons一个新项目的过程(因为旧值是一个清单);这被设置为给定键的新值。
  • 最后一个参数是在未找到密钥时返回的默认值,在调用更新程序过程之前