我最近一直在Common Lisp中使用哈希表。我一直想知道如何製作一個包含與第一個相同的值的哈希表的單獨副本。有沒有官方的方式來做到這一點?如果沒有,你可以給我一個使用maphash的例子嗎?在Lisp中複製哈希表
4
A
回答
4
由於clhs沒有列出副本表函數我會假設maphash是要走的路。
(defun copy-table (table)
(let ((new-table (make-hash-table
:test (hash-table-test table)
:size (hash-table-size table))))
(maphash #'(lambda(key value)
(setf (gethash key new-table) value))
table)
new-table))
(let ((table (make-hash-table)))
(mapcar #'(lambda(arg argg)
(setf (gethash arg table) argg))
'(1 2 3 4) '(a b c d))
(format t "~a~%" table)
(format t "~a~%" (copy-table table)))
#<HASH-TABLE :TEST EQL :COUNT 4 {10063C7F13}>
#<HASH-TABLE :TEST EQL :COUNT 4 {10063C86D3}>
此功能但是不走哈希表的特殊配置考慮在內,但應足以作爲一個例子。
+0
謝謝,這樣做,我編程康威的生活遊戲,我只需要創建一個臨時副本,我可以修改爲下一代而不影響當代。現在效果很好。 – thelostlambda 2014-09-26 15:45:49
5
Sim's answer複製散列表,但散列表還有兩個其他功能可能是好的複製表的有效人口。下面是保留該信息的版本,同時還展示了環的與哈希表工作(作爲替代maphash)能力:
(defun copy-hash-table (hash-table)
(let ((ht (make-hash-table
:test (hash-table-test hash-table)
:rehash-size (hash-table-rehash-size hash-table)
:rehash-threshold (hash-table-rehash-threshold hash-table)
:size (hash-table-size hash-table))))
(loop for key being each hash-key of hash-table
using (hash-value value)
do (setf (gethash key ht) value)
finally (return ht))))
2
不要重新發明輪子,用copy-hash-table
從Alexandria 。
相關問題
- 1. 在Ruby中複製哈希
- 2. 複製Java哈希表
- 3. 使用C++將哈希表複製到另一個哈希表
- 4. 哈希表中的搜索哈希
- 5. 如何在powershell中的哈希表中添加哈希表?
- 6. 修改哈希表中的Common Lisp和讓
- 7. 在哈希表中創建字符串哈希值的時間複雜度
- 8. 哈希表vs哈希列表與哈希樹?
- 9. 形式的哈希表 - 在Java中的<key,哈希表>
- 10. 返回在哈希表中
- 11. 更新在哈希表中
- 12. 哈希表在Java
- 13. 將C#MD5哈希複製到PHP
- 14. 哈希數組元素複製
- 15. 如何在哈希中存儲哈希哈希?
- 16. 哈希打印表哈希perl
- 17. 在javascript中構建哈希表和完美的哈希函數
- 18. 寫入/讀取的Common Lisp(SBCL)哈希表,或替代
- 19. 我們可以把哈希表放在哈希表裏面嗎?
- 20. Powershell哈希表和重複鍵
- 21. 哈希表的時間複雜度
- 22. 訪問哈希表中的值相同的哈希表在PowerShell中
- 23. 如何複製在C語言中的java哈希碼
- 24. 在Python中複製Java密碼哈希代碼(PBKDF2WithHmacSHA1)
- 25. 將哈希的內容複製到另一個更大的哈希
- 26. 在Golang中製作哈希陣列
- 27. 在Oracle中製作一行sha1哈希
- 28. F#中的哈希鏈接和.net中的弱哈希表
- 29. 如何從哈希快速複製到列表視圖?
- 30. 在Python創建哈希表
我想你可能也有興趣在[不可變的散列表](http://common-lisp.net/projects/fset/Site/index.html)。如果你複製很多,它可能會更有效。 – Sylwester 2014-09-25 22:01:47
廣泛使用的亞歷山大圖書館有一個副本哈希表函數 – mcheema 2017-01-03 20:43:41