수색…


해시 테이블 만들기

해쉬 테이블은 make-hash-table 의해 생성됩니다 :

(defvar *my-table* (make-hash-table))

함수는 결과 해시 테이블의 동작을 자세히 지정하기 위해 키워드 매개 변수를 사용할 수 있습니다.

  • test : 키가 동일한 지 비교하는 데 사용되는 함수를 선택합니다. 함수 eq , eql , equal 또는 equalp 중 하나에 대한 equalp 있습니다. 기본값은 eq 입니다.
  • size : 처음에 필요한 공간에 대한 구현에 대한 힌트.
  • rehash-size : 정수 (> = 1) 인 경우, 다시 해쉬 할 때 해시 테이블의 용량이 지정된 수만큼 증가합니다. 그렇지 않은 경우 float (> 1.0)이면 해시 테이블의 용량이 rehash-size 와 이전 용량의 곱으로 증가합니다.
  • rehash-threshold : 다시 해시를 시작하기 위해 해쉬 테이블이 얼마나 rehash-threshold 지를 지정합니다.

maphash로 해쉬 테이블의 엔트리 반복하기

(defun print-entry (key value)
  (format t "~A => ~A~%" key value))

(maphash #'print-entry *my-table*) ;; => NIL

maphash 를 사용하면 해시 테이블의 항목을 반복 할 수 있습니다. 반복의 순서는 지정되지 않습니다. 첫 번째 인수는 키와 현재 항목의 값이라는 두 개의 매개 변수를 받아들이는 함수입니다.

maphash 항상 NIL 반환합니다.

반복문을 사용하여 해쉬 테이블의 엔트리 반복하기

루프 매크로는 키, 값 또는 해시 테이블의 키와 값에 대한 반복을 지원합니다. 다음 예제는 가능성을 보여 주지만 전체 루프 구문을 사용하면 더 많은 조합과 변형이 가능합니다.

키 및 값 이상

(let ((ht (make-hash-table)))
  (setf (gethash 'a ht) 1
        (gethash 'b ht) 2)
  (loop for k being each hash-key of ht
     using (hash-value v)
     collect (cons k v)))
;;=> ((A . 1) (B . 2))
(let ((ht (make-hash-table)))
  (setf (gethash 'a ht) 1
        (gethash 'b ht) 2)
  (loop for v being each hash-value of ht
     using (hash-key k)
     collect (cons k v)))
;;=> ((A . 1) (B . 2))

오버 키

(let ((ht (make-hash-table)))
  (setf (gethash 'a ht) 1
        (gethash 'b ht) 2)
  (loop for k being each hash-key of ht
       collect k))
;;=> (A B)

값 초과

(let ((ht (make-hash-table)))
  (setf (gethash 'a ht) 1
        (gethash 'b ht) 2)
  (loop for v being each hash-value of ht
       collect v))
;;=> (1 2)

해시 테이블 반복자를 사용하여 해시 테이블의 항목 반복 처리

해시 테이블의 키와 값은 매크로 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) 


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow