使用哈希表迭代器迭代哈希表的条目

可以使用宏 with-hash-table-iterator 迭代 哈希表的键和值。这可能比 maphashloop 更复杂,但它可以用于实现这些方法中使用的迭代构造。 with-hash-table-iterator 接受一个名称和一个哈希表,并在一个体内绑定名称,以便对该名称的连续调用产生多个值:(i)一个布尔值,指示是否存在值; (ii)参赛作品的关键; (iii)参赛作品的价值。

(let ((ht (make-hash-table)))
  (setf (gethash 'a ht) 1
        (gethash 'b ht) 2)
  (with-hash-table-iterator (iterator ht)
    (print (multiple-value-list (iterator)))
    (print (multiple-value-list (iterator)))
    (print (multiple-value-list (iterator)))))

;; (T A 1) 
;; (T B 2) 
;; (NIL)