更新存储在散列表中的列表
问题描述:
我有一个不可变的散列表,其中包含一系列列表作为值。我写了一个程序,所以我可以将项目添加到列表中的一个,返回一个新的哈希:更新存储在散列表中的列表
(define (update hash key item)
(hash-set hash
key
(cons item
(hash-ref hash key)))))
这似乎很好地工作,但感觉尴尬和冗长。有没有一个内置的程序来完成这一点,或者是一种更习惯的方式来实现同样的事情?
答
这是简单,因为它可以得到:
(define (update hash key item)
(hash-update hash key (curry cons item) '()))
说明:
-
hash-update
返回新哈希与给定键的更新值 - 或者你可以使用hash-update!
来修改哈希就地。 -
hash
和key
是不言自明的。 - 第三个参数是一个更新程序过程接收作为参数的旧值,在这种情况下,它是一个程序
cons
es新项目(因为旧值是一个列表);这被设置为给定键的新值。 - 最后一个参数是在未找到密钥的情况下返回的默认值,之前调用更新程序过程。
谢谢你,这更简洁。这也让我去除了第二个过程和一些条件逻辑....基本上,我写了一些其他的东西来在密钥不存在的情况下更新散列。你的版本处理这两种情况。 – djfdev
太棒了!我很高兴这是有用的:) –