الموضوع السابق   الموضوع التالي 

تجمعات بسيطة

تحتوي الوحدة البرمجية المصرفة DNSDGen.dcu على بعض التجمعات (Collections) لأنواع البيانات الأساسية، و هي: الأعداد الصحيحة (Integer) و الأعداد الحقيقية (Real) و العملة (Currency) و التاريخ (TDate) و النصوص (String).
يمكنك الاستفادة من هذه التجمعات في تخزين مجموعة من القيم و القيام ببعض العمليات عليها، مثل التأكد من وجود قيمة ضمن التجمع و الحصول على موقعها فيه، إيجاد أكبر أو أصغر قيمة، ترتيب القيم ضمن التجمع، و طبعاً إضافة قيم إلى التجمع و حذفها منه.


ما الفرق بين التجمع (Collection) و المصفوفة (Array) و المجموعة (Set)؟ المصفوفة هي مجموعة من المواقع المتتابعة في الذاكرة، و التي تحتوي على نفس النوع من البيانات. التجمع - رغم أنه أيضاً يتعامل مع نوع واحد من البيانات - فإنه في الواقع كائن (Object) يحتوي على مجموعة من الخصائص (Properties) و المناهج (Methods) التي تمكننا من التعامل مع محتوياته بشكل أسهل و أكثر ديناميكية دون الحاجة إلى كتابة الكثير من الشفرة (Code). أما المجموعة فإنها أيضاً عبارة عن وسيلة لتجميع مجموعة من القيم المتشابهة في النوع، لكنها تفتقر إلى الخصائص و المناهج التي تتوفر للتجمع.


التجمعات المعرفة في الوحدة DNSDGen.dcu

اسم الصنف (Class)نوع البيانات التي يتعامل معها
TIntegerCollectionأعداد صحيحة (Integer)
TFloatCollectionأعداد حقيقة (Real)
TCurrencyCollectionعملة (Currency)
TDateCollectionتاريخ (TDate)
TStringCollectionنصوص (String)

الخصائص (Properties)
كل صنف من أصناف التجمعات السابقة يحتوي على الخصائص التالية:

الخاصية: Items
هذه الخاصية تستعمل للوصول إلى قيمة معينة ضمن التجمع بتحديد رقمها (موقعها ضمن التجمع) حيث ترتيب القيم يبدأ بالصفر، أي أن القيمة الأولى رقمها 0، و القيمة الثانية رقمها 1، و القيمة الثالثة رقمها 2، ... إلخ. أما صيغة الخاصية Items فهي كالتالي:

CollectionName.Items[Index]

حيث Index هو رقم القيمة أو البند، مثلاً:

A := CollectionName.Items[8];
CollectionName.Items[3] := B;

علماً بأن الخاصية Items هي الخاصة الافتراضية (Default) للتجمع، و بالتالي يمكن حذفها، أي أن الجملتين التاليتين لهما نفس المعنى:

A := CollectionName.Items[8];
A := CollectionName[8];

تذكر أن ترقيم البنود (القيم) يبدأ بالصفر، و بالتالي فإن رقم آخر قيمة هو عبارة عن عدد القيم ناقص 1.
تغيير إحدى القيم باستعمال الخاصية Items لا يؤدي إلى إعادة ترتيب القيم حتى و إن كانت الخاصية Sorted مضبوطة على True.

الخاصية: Count
هذه الخاصية للقراءة فقط، و تعطي عدد القيم (البنود) التي يضمها التجمع

الخاصية: Sorted
هذه الخاصية تحدد ما إذا سيتم ترتيب القيم ضمن التجمع تلقائياً أم لا. الترتيب يكون دائماً تصاعدياً (أي من الأصغر إلى الأكبر). القيمة الافتراضية هي False و تعني أن القيم ستكون مرتبة حسب أولوية إضافتها إلى التجمع، و كل قيمة جديدة تضاف إلى التجمع ستضاف إلى نهاية التجمع (بعد آخر قيمة موجودة سابقاً). أما إذا جعلت قيمتها True فإن القيم يتم ترتيبها تلقائياً، و كل قيمة جديدة تضاف إلى التجمع فإنها تدرج في مكانها الصحيح حسب الترتيب. من ناحية ثانية قد تصبح القيم في التجمع غير مرتبة مع أن الخاصية Sorted تكون مضبوطة على True و ذلك في حال تغيير القيم بشكل مباشر باستعمال الخاصية Items (إذا كان ستتم إعادة ترتيب القيم كلما تم تغيير قيمة معينة فإن الحلقات - مثل حلقة For - لن تعمل بشكل صحيح مع محتويات التجمع، و ذلك لأن إعادة الترتيب ستؤدي إلى تغيير مواقع القيم ضمن التجمع!).

الخاصية: Min
هذه الخاصية للقراءة فقط، و تعطي أصغر قيمة يضمها التجمع.

الخاصية: Max
هذه الخاصية للقراءة فقط، و تعطي أكبر قيمة يضمها التجمع.

الخاصية: CaseSensitive (النوع TStringCollection فقط)
هذه الخاصية تحدد ما إذا سيتم أخذ حالة الأحرف (الأجنبية) بعين الاعتبار أم لا عند ترتيب النصوص و مقارنتها، و بالتالي فإن لها تأثيراً على ترتيب النصوص ضمن التجمع و كذلك استخراج أكبر و أصغر قيمة.
القيمة الافتراضية هي False، و تعني أن إجراءات معالجة النصوص لا تهتم لحالة الأحرف، فمثلاً الكلمات Najy و najy و NAJY كلها متساوية. أما إذا جعلت قيمتها True فإنها تؤدي إلى التفرقة بين الحروف الكبيرة و الحروف الصغيرة.


المناهج (Methods)
كل صنف من أصناف التجمعات السابقة يحتوي على المناهج التالية:

المنهج: Create
لإنشاء كائن جديد. و يكون بالصيغة التالية:

CollectionName := CollectionClass.Create;

المنهج: Destroy
لتحطيم الكائن و تحرير الذاكرة. و يكون بالصيغة التالية:

CollectionName.Destroy;

لا تستعمل هذا المنهج بشكل مباشر، و لكن قم باستدعاء المنهج Free الموروث، و الذي بدوره سيقوم باستدعاء المنهج Destroy.

المنهج: Add
لإضافة بنود (قيم) جديدة إلى التجمع. و يكون بالصيغة التالية:

IntVar := CollectionName.Add(NewValue);

حيث IntVar متغير من النوع Integer، و ذلك لأن المنهج Add يعيد عدد البنود في التجمع بعد إضافة القيمة الجديدة. أما نوع القيمة المضافة NewValue فيعتمد على نوع التجمع، فمثلاً مع النوع TIntegerCollection يكون نوع NewValue هو Integer، و مع النوع TDateCollection يكون نوعه TDate، ... إلخ.
إذا كانت الخاصية Sorted مضبوطة على False (الافتراضي) فإن القيمة الجديدة تضاف إلى نهاية التجمع، أما إذا كانت الخاصية Sorted مضبوطة على True فإن القيمة الجديدة تدرج في مكانها الصحيح الذي يستلزمه ترتيب القيم.

المنهج: Delete
لحذف بنود (قيم) من التجمع. و يكون بالصيغة التالية:

IntVar := CollectionName.Delete(Index);

حيث IntVar متغير من النوع Integer، و ذلك لأن المنهج Delete يعيد عدد البنود في التجمع بعد حذف القيمة المطلوبة. أما Index فهو رقم القيمة المطلوبة حذفها، حيث يبدأ ترقيم القيم بالصفر، أي أن القيمة الأولى رقمها 0، و القيمة الثانية رقمها 1، ... إلخ.

المنهج: Clear
لحذف جميع البنود (القيم) من التجمع. و يكون بالصيغة التالية:

CollectionName.Clear;

المنهج: ValueFound
للتأكد من وجود قيمة في التجمع و الحصول على موقع (رقم) أول ظهور لها في حال وجودها. و يكون بالصيغة التالية:

IntVar := CollectionName.ValueFound(Value);

حيث IntVar متغير من النوع Integer، و ذلك لأن المنهج ValueFound يعيد رقم أول تواجد للقيمة Value ضمن التجمع في حال وجودها مرة واحدة على الأقل. أما إذا كانت القيمة غير موجودة في التجمع فإن المنهج ValueFound يعيد -1. نوع القيمة Value يعتمد على نوع التجمع.

المنهج: Sort
لترتيب (فرز) البنود (القيم) في التجمع. و يكون بالصيغة التالية:

CollectionName.Sort;

الترتيب يكون تصاعدياً، أي من الأصغر إلى الأكبر. و بالنسبة إلى النوع TStringCollection يكون للخاصية CaseSensitive تأثير على طريقة فرز الكلمات المكتوبة بحروف لاتينية.
تذكر أن عملية الفرز قد تؤدي إلى تحريك بعض أو كل القيم من مواقعها ضمن التجمع، و بالتالي فإنه في حال احتفاظك سابقاً برقم قيمة معينة فإن ذلك الرقم قد يشير إلى قيمة مختلفة عما كان يشير إليه قبل الفرز.


 أعلى الصفحة
 الموضوع السابق   الموضوع التالي