استخدام TDictionary لجداول التجزئة في دلفي

قدم في دلفي 2009 ، فئة TDictionary، المعرفة في Generics. وحدة مجموعات ، تمثل مجموعة نوع تجزئة عامة لأزواج القيمة الرئيسية.

أنواع عامة، والتي تم تقديمها أيضًا في دلفي 2009 ، تسمح لك بتحديد الفئات التي لا تحدد نوع أعضاء البيانات تحديدًا.

القاموس ، بطريقة ما ، يشبه المصفوفة. في مجموعة مصفوفة أنت تعمل مع سلسلة (مجموعة) من القيم المفهرسة بقيمة صحيحة ، والتي يمكن أن تكون أي قيمة قيمة النوع الترتيبي. يحتوي هذا المؤشر على حد أدنى وأعلى.

في القاموس ، يمكنك تخزين المفاتيح والقيم حيث يمكن أن يكون أي منهما من أي نوع.

مُنشئ TDictionary

ومن هنا جاء إعلان مُنشئ TDictionary:

في دلفي ، يتم تعريف TDictionary كجدول تجزئة. تمثل جداول التجزئة مجموعة من أزواج المفتاح والقيمة التي يتم تنظيمها استنادًا إلى رمز تجزئة المفتاح. تم تحسين جداول التجزئة لعمليات البحث (السرعة). عند إضافة زوج قيمة مفتاح إلى جدول تجزئة ، يتم حساب تجزئة المفتاح وتخزينه مع الزوج المضاف.

TKey و TValue ، لأنهما من الأدوية الجنيسة ، يمكن أن يكونا من أي نوع. على سبيل المثال ، إذا كانت المعلومات التي ستخزنها في القاموس واردة من بعض قواعد البيانات ، فقد يكون مفتاحك عبارة عن GUID (أو بعض القيم الأخرى التي تقدم قيمة الفهرس الفريدة) بينما يمكن أن تكون القيمة كائنًا تم تعيينه إلى صف من البيانات في قاعدة البيانات الخاصة بك الجداول.

instagram viewer

باستخدام TDictionary

من أجل البساطة ، يستخدم المثال أدناه الأعداد الصحيحة لـ TKeys و chars for TValues.

أولاً ، نعلن قاموسنا عن طريق تحديد أنواع TKey و TValue:

ثم يتم ملء القاموس باستخدام طريقة Add. نظرًا لأنه لا يمكن أن يحتوي القاموس على زوجين من نفس قيمة المفتاح ، يمكنك استخدام طريقة ContainsKey للتحقق مما إذا كان زوج من قيم المفاتيح داخل القاموس بالفعل.

لإزالة زوج من القاموس ، استخدم طريقة الإزالة. لن تتسبب هذه الطريقة في حدوث مشكلات إذا لم يكن زوج بمفتاح محدد جزءًا من القاموس.

للذهاب من خلال جميع الأزواج من خلال حلقات متكررة يمكنك القيام به لفي الحلقة.

استخدم طريقة TryGetValue للتحقق مما إذا كان قد تم تضمين زوج من قيم المفاتيح في القاموس.

فرز القاموس

نظرًا لأن القاموس عبارة عن جدول تجزئة ، فإنه لا يقوم بتخزين العناصر في ترتيب فرز محدد. للتكرار من خلال المفاتيح التي تم فرزها لتلبية احتياجاتك الخاصة ، استفد من TList - نوع مجموعة عام يدعم الفرز.

الكود أعلاه يفرز المفاتيح تصاعديًا وتنازليًا ويمسك القيم كما لو تم تخزينها بالترتيب الذي تم فرزه في القاموس. يستخدم الفرز التنازلي لقيم المفاتيح من النوع الصحيح TComparer وأسلوب مجهول.

عندما تكون المفاتيح والقيم من نوع TObject

المثال المذكور أعلاه بسيط لأن كلا من المفتاح والقيمة من الأنواع البسيطة. يمكن أن يكون لديك قواميس معقدة حيث يكون المفتاح والقيمة من الأنواع "المعقدة" مثل السجلات أو الكائنات.

إليك مثال آخر:

هنا يتم استخدام سجل مخصص للمفتاح ويتم استخدام كائن / فئة مخصصة للقيمة.

لاحظ استخدام متخصص TObjectDictionary صف هنا. يمكن TObjectDictionary معالجة عمر الكائنات تلقائيًا.

لا يمكن أن تكون القيمة الرئيسية صفرية ، بينما يمكن أن تكون قيمة القيمة.

عندما يتم إنشاء TObjectDictionary ، تحدد معلمة الملكية ما إذا كان القاموس يمتلك المفاتيح أو القيم أو كليهما - وبالتالي يساعدك على عدم حدوث تسرب للذاكرة.