खोज…


हैश टेबल बनाना

हैश टेबल make-hash-table द्वारा बनाए गए make-hash-table :

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

परिणामी हैश तालिका के व्यवहार को आगे बढ़ाने के लिए फ़ंक्शन कीवर्ड पैरामीटर ले सकता है:

  • test : समानता के लिए कुंजियों की तुलना करने के लिए उपयोग किए जाने वाले फ़ंक्शन का चयन करता है। हो सकता है कि कार्यों में से एक के लिए एक डेसिग्नेटर eq , eql , equal या equalp । डिफ़ॉल्ट eq
  • size : अंतरिक्ष के बारे में कार्यान्वयन के लिए एक संकेत जो शुरू में आवश्यक हो सकता है।
  • rehash-size : यदि एक पूर्णांक (> = 1) है, तो एक rehash करते समय, हैश तालिका निर्दिष्ट संख्या से अपनी क्षमता बढ़ाएगी। यदि अन्यथा एक फ्लोट (> 1.0) है, तो हैश टेबल अपनी क्षमता को rehash-size और पिछले क्षमता के उत्पाद तक बढ़ा देगा।
  • rehash-threshold : निर्दिष्ट करता है कि रेहश को ट्रिगर करने के लिए हैश टेबल को पूरा कैसे करना है।

मैपश के साथ हैश टेबल की प्रविष्टियों पर इरेटिंग

(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 एक नाम और एक हैश टेबल लेता है और एक बॉडी के भीतर नाम को बांधता है जैसे कि क्रमिक कॉल नाम से कई मान उत्पन्न करता है: (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