2017-11-10 108 views
1

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

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

这似乎很好地工作,但感觉尴尬和冗长。有没有一个内置的程序来完成这一点,或者是一种更习惯的方式来实现同样的事情?

回答

2

这是简单,因为它可以得到:

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

说明:

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

谢谢你,这更简洁。这也让我去除了第二个过程和一些条件逻辑....基本上,我写了一些其他的东西来在密钥不存在的情况下更新散列。你的版本处理这两种情况。 – djfdev

+0

太棒了!我很高兴这是有用的:) –