Hash Table Iteration

  • loop

  • maphash

  • alexandria

  • for:for ... over

  • trivial-do:dohash

  • loop


(let ((ht (make-hash-table)))
    (setf (gethash :a ht) 1)
    (setf (gethash :b ht) 2)

    (loop :for k :being :the :hash-key 
        :using (:hash-value v)
        :of ht
        do (print (list k v))))

  • maphash

(let ((ht (make-hash-table)))
    (setf (gethash :a ht) 1)
    (setf (gethash :b ht) 2)

    (maphash (lambda (k v)
                (print (list k v)))
             ht))

  • alexandria

(let ((ht (make-hash-table)))
    (setf (gethash :a ht) 1)
    (setf (gethash :b ht) 2)

    (alexandria:hash-table-keys ht))

  • for library

(let ((ht (make-hash-table)))
    (setf (gethash :a ht) 1)
    (setf (gethash :b ht) 2)

    (for:for ((key/value over ht))
      (print key/value)))

  • trivial-do

(let ((ht (make-hash-table)))
    (setf (gethash :a ht) 1)
    (setf (gethash :b ht) 2)

    (trivial-do:dohash (k v ht)
        (print (list k v))))