استخدام كائن السلسلة كمفتاح تجزئة في lisp المشترك

StackOverflow https://stackoverflow.com/questions/1409069

سؤال

أحاول إنشاء نوع "قاموس" - أي جدول التجزئة مع سلسلة كمفتاح. هل هذا ممكن أم حكيم في Lisp؟

لقد لاحظت أن هذا يعمل كما هو متوقع:

> (setq table (make-hash-table))
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA46>
> (setf (gethash 1 table) "one")
"one"
> (gethash 1 table)
"one"

ومع ذلك ، فإن ما يلي لا:

> (setq table (make-hash-table))
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA0E>
> table
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA0E>
> (setf (gethash "one" table) 1)
1
> (gethash "one" table)
NIL
NIL
هل كانت مفيدة؟

المحلول

تحتاج إلى جعل جدول التجزئة الذي يستخدم "متساوية بدلاً من ذلك إذا" eql. "EQL لا تقيم سلسلتين بنفس المحتوى إلى" T "في حين" يساوي.

هنا كيف تفعلها:

(make-hash-table :test 'equal)

كما لاحظ Skypher ، يمكنك أيضًا استخدام 'EqualP بدلاً من ذلك إذا كنت تريد تجزئة سلسلة غير حساسة للحالة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top