2017-11-10 104 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

太棒了!我很高興這是有用的:) –