إستفسار حول Generic TList؟
#1
السلام عليكم ورحمة الله تعالى وبركاته

لقد قمت بإنشاء سجل على النحو التالي :
كود :
type
  TPersonne = record
    ID : word;
    Nom : String[30];
    Age : byte;
  end;

وقمت بتعريف Generic TList :
كود :
PersonneList : TList<TPersonne>;

عند حذف عنصر منها وضعت : 
كود :
PersonneList.Delete(iIndex);

السؤال : هل عند حذف العنصر يتم تحرير مساحته من الذاكرة  اتوماتيكيا , ام يجب عليا تحريره يدويا؟
السؤال بطريقة اخرى : ماذا نعني بحذف عنصر من Generic TList ؟

بارك الله فيك وحفظكم من كل سوء

سؤال رقم 2 :

كيف يتم المقارنة عن طريق حقل معين مثلا ID, فعندما يجد ID متساويان لا يهتم ببقية الحقول؟
وجدت هذه العبارة تتكلم عن الموضوع لكن لم اعرف كيف يتم ذلك :
AComparer est une fonction de comparaison. Si elle n'est pas fournie, le comparateur par défaut du type est utilisé.
الرد
#2
وعليكم السلام ورحمة الله

عند الحذف لا يتم تحرير العنصر من الذاكرة ، على العموم دائما عندما تحتاج الى معرفة هذا يمكنك حذفه من Tlist وبعدها جرب حذفه من الذاكرة
اذا كان غير موجود سوف تتحصل على رسالة خطاء .
هذه طريقة استخدمها دائما للتأكد من العناصر والكائنات .
إذ جاءوكم من فوقكم ومن أسفل منكم وإذ زاغت الأبصار وبلغت القلوب الحناجر وتظنون بالله الظنون
[-] كل من 1 user says قال شكرا ل Delphi4Us على المشاركة المفيدة
  • MasteranyOne
الرد
#3
استخدم TObjectList فهي تقوم بتحرير أي اوبجكت يتم حذفه منها.
[-] كل من 1 user says قال شكرا ل sofiane201 على المشاركة المفيدة
  • MasteranyOne
الرد
#4
بارك الله فيكم إخوتي Delphi4Us وsofiane201 على المساعدة والشرح.

بالنسبة للأخ سفيان : TObjectList  تصلح مع الكائينات object وليس record ؟

بالنسبة للإجابة عن السؤال التاني فقد وجدتها والحمدلله :

1- يجب تعريف الوحدة : Generics.Defaults في قسم uses
2- إستعمال هذا الكود عندا إنشاء القائمة العامة Generic TList :


كود :
procedure TForm1.FormCreate(Sender: TObject);
var
  AComparer : IComparer<TPersonne>;
begin
   AComparer := TDelegatedComparer<TPersonne>.Create(
    function(const Left, Right: TPersonne): integer
    begin
      Result := Left.ID - Right.ID;
   end);
   
PersonneList := TList<TPersonne>.Create(AComparer);
end;

في هذه الحالة تصبح ايي عملية بحث, ترتيب تتم على القائمة فسوف يتم على حسب ماهو وجود في AComparer
الرد
#5
الآن رأيت انك استخدمت record, في هذه الحال لا يهم تحريره من الذاكرة.
[-] كل من 1 user says قال شكرا ل sofiane201 على المشاركة المفيدة
  • MasteranyOne
الرد
#6
هذا ما وجدته حول هل يتم تحرير record عند حذفها او لا :

Remarque: Clear ne libère pas les éléments au fur et à mesure qu'ils sont retirés. Si vous avez besoin de les libérer, utilisez
l'événement OnNotify, qui survient pour chaque élément retiré et fournit l'élément retiré.

في المرفق تجدون كتاب يتكلم عن Generics Collections ومن بينها TList


الملفات المرفقة
.pdf   genericcollections.pdf (الحجم : 502.02 KB / التحميلات : 5)
الرد


التنقل السريع :


مستخدمين يتصفحوا هذا الموضوع: 1 ضيف