1)建立哈希表java
用make-hash-table函數建立哈希表:python
CL-USER> (defparameter *my-hash* (make-hash-table)) *MY-HASH* CL-USER> (setf (gethash 'one-entry *my-hash*) "one") ;;賦值 "one" CL-USER> (setf (gethash 'another-entry *my-hash*) 2/4) 1/2 CL-USER> (gethash 'one-entry *my-hash*) "one" T CL-USER> (gethash 'another-entry *my-hash*) 1/2
2)檢測所建立的哈希表函數
CL-USER> (if (gethash 'one-entry *my-hash*) "Key exists" "Key does not exist") "Key exists" CL-USER> (if (gethash 'another-entry *my-hash*) "Key exists" "Key does not exist") "Key exists" CL-USER> (setf (gethash 'another-entry *my-hash*) nil) NIL CL-USER> (if (gethash 'another-entry *my-hash*) "Key exists" "Key does not exist") "Key does not exist" CL-USER> (if (nth-value 1 (gethash 'another-entry *my-hash*)) "Key eixst" "Key does not exist") "Key eixst" CL-USER> (if (nth-value 1 (gethash 'no-entry *my-hash*)) "Key eixts" "Key does not exits") "Key does not exits"
3)刪除哈希表oop
CL-USER> (defparameter *my-hash* (make-hash-table)) *MY-HASH* CL-USER> (setf (gethash 'first-key *my-hash*) 'one) ONE CL-USER> (gethash 'first-key *my-hash*) ONE T CL-USER> (remhash 'first-key *my-hash*) T CL-USER> (gethash 'first-key *my-hash*) NIL NIL
4)遍歷哈希表spa
a、能夠用maphash函數遍歷哈希表:
code
CL-USER> (defparameter *my-hash* (make-hash-table)) *MY-HASH* CL-USER> (setf (gethash 'first-key *my-hash*) 'one) ONE CL-USER> (setf (gethash 'second-key *my-hash*) 'two) TWO CL-USER> (setf (gethash 'third-key *my-hash*) nil) NIL CL-USER> (setf (gethash nil *my-hash*) 'nil-value) NIL-VALUE CL-USER> (defun print-hash-entry (key value) (format t "The value associated with the key ~S is ~S~%" key value)) PRINT-HASH-ENTRY CL-USER> (maphash #'print-hash-entry *my-hash*) The value associated with the key FIRST-KEY is ONE The value associated with the key SECOND-KEY is TWO The value associated with the key THIRD-KEY is NIL The value associated with the key NIL is NIL-VALUE NIL CL-USER> (defun print-hash-entry (key value) (format t "~S ~S~%" key value)) CL-USER> (maphash #'print-hash-entry *my-hash*) FIRST-KEY ONE SECOND-KEY TWO THIRD-KEY NIL NIL NIL-VALUE NIL
b、也能夠用with-hash-table-iterator函數進行遍歷,相對複雜一點:orm
CL-USER> (defparameter *my-hash* (make-hash-table)) *MY-HASH* CL-USER> (setf (gethash 'first-key *my-hash*) 'one) ONE CL-USER> (setf (gethash 'second-key *my-hash*) 'two) TWO CL-USER> (setf (gethash 'third-key *my-hash*) nil) NIL CL-USER> (setf (gethash 'nil *my-hash*) 'nothing) NOTHING CL-USER> (with-hash-table-iterator (my-iterator *my-hash*) (loop (multiple-value-bind (entry-p key value) (my-iterator) (if entry-p (print-hash-entry key value) (return))))) FIRST-KEY ONE SECOND-KEY TWO THIRD-KEY NIL NIL NOTHING NIL
c、一樣用loop循環遍歷ip
CL-USER> (loop for key being the hash-keys of *my-hash* do (print key)) FIRST-KEY SECOND-KEY THIRD-KEY NIL NIL
d、loop循環遍歷:ci
CL-USER> (loop for key being the hash-keys of *my-hash* using (hash-value value) do (format t "The value associated with the key ~S is ~S~%" key value)) The value associated with the key FIRST-KEY is ONE The value associated with the key SECOND-KEY is TWO The value associated with the key THIRD-KEY is NIL The value associated with the key NIL is NOTHING NIL CL-USER> (loop for value being the hash-values of *my-hash* do (print value)) ONE TWO NIL NOTHING NIL CL-USER> (loop for value being the hash-values of *my-hash* using (hash-key key) do (format t "~&~A -> ~A" key value)) FIRST-KEY -> ONE SECOND-KEY -> TWO THIRD-KEY -> NIL NIL -> NOTHING NIL
5)計算哈希表數據數量rem
用hash-table-count函數:
CL-USER> (defparameter *my-hash2* (make-hash-table)) *MY-HASH2* CL-USER> (hash-table-count *my-hash2*) ;;count the entries in a hash table 0 CL-USER> (setf (gethash 'first *my-hash2*) 'one) ONE CL-USER> (setf (gethash 'second *my-hash2*) 2) 2 CL-USER> (setf (gethash 'third *my-hash2*) 3) 3 CL-USER> (hash-table-count *my-hash2*) 3 CL-USER> (setf (gethash 'second *my-hash2*) 'two) TWO CL-USER> (hash-table-count *my-hash2*) 3 CL-USER> (clrhash *my-hash2*) ;;clean hash table #<HASH-TABLE :TEST EQL :COUNT 0 {25045971}> CL-USER> (hash-table-count *my-hash2*) 0