ハッシュの全エントリに対して処理を実行する - lisp-cookbook-ja/common-lisp GitHub Wiki

ハッシュ

ハッシュの全エントリに対して処理を実行する

専用の構文maphashがあります。他loop等でも処理が可能です。 また、このような処理の構文を自作したい場合には、with-hash-table-iteratorを利用します。

(let ((ht (make-hash-table :test #'equal))
      (default 100))
  (setf (gethash "apple" ht) 150
        (gethash "banana" ht) 300
        (gethash "lemon" ht) 300)

  (maphash (lambda (key val)
             (format t "key => ~A, val => ~A~%" key val))
           ht))

;-> key => apple, val => 150
    key => banana, val => 300
    key => lemon, val => 300
;=> nil
;; ht は上の例のハッシュテーブルと同じもの。
(loop for key being the hash-keys in ht
      using (hash-value val)
      do (format t "key => ~A, val => ~A~%" key val))