الصف ArrayList

يوجد العديد من الصفوف التي تمكننا من التعامل مع البيانات، هذه الصفوف موجودة في فضاء الأسماء System.Collections منها: ArrayList، SortedList، Queue، Stack، Hashtable، BitArray، StringCollection، StringDictionary، ListDictionary، HybridDictionary، NameValueCollection.

إضافة وحذف عناصر:
الصف
ArrayList: تسمح لنا بتخزين أي كائنات نشاء حيث يقبل الاجراء Add كائن (Object) الكود التالي يوضح كيفية إضافة عناصر إليها:


using System.Collections;

ArrayList coll = new ArrayList();

// Add individual items to the collection

string s = “Hello”;

coll.Add(s);

coll.Add(“hi”);

coll.Add(50);

coll.Add(new object());


كما يحوي الصف ArrayList على الاجراء AddRange الذي يمكنه أن يقبل مجموعة من العناصر أو أي كائن بشرط أنه يدعم الواجهة (Interface) ICollection مثل (جميع أنواع المصفوفات، ArrayList)، المثال التالي يوضح ذلك:

string[] anArray = new string[] { “more”, “or”, “less” };

coll.AddRange(anArray);

object[] anotherArray = new object[] { new object(), new ArrayList() };

coll.AddRange(anotherArray);


يعتبر الصف ArrayList من المجموعات الديناميكية، لذلك إن استخدام الاجرائين Add و AddRange يؤدي إلى إضافة العناصر إلى آخر المجموعة، كما أن هذا الصف يحوي على الاجراء Insert الذي يسمح بإدخال العنصر في موقع محدد، الكود التالي يوضح ذلك:


coll.Insert(3, “Hey all”);

string[] moreStrings = new string[] { “goodnight”, “see ya” };

coll.Insert(4, moreStrings);


كما يمكنك أيضا تحديد العنصر الذي تريد من خلال رقم الفهرسة (الدليل)  له على سبيل المثال:

coll[3] = “Hey All”;

كما يوجد ثلاث توابع من أجل عملية الحذف وهم: Remove، RemoveAt، RemoveRange

التابع Remove يقوم بحذف كائن محدد من المجمع ولا يظهر أي شيء يدل على أن عملية الحذف قد تمت، أم أنه في الاصل لم يجد هذا الكائن الذي طلبت حذفه، الكود التالي يوضح استخدام التابع Remove:


coll.Add(“Hello”);

coll.Remove(“Hello”);


أما التابع RemoveAt يقوم بحذف عنصر محدد وذلك بتحديد رقم فهرسته (دليله)، أما التابع RemoveRange يقوم بعملية الحذف لمجموع من الفهارس (الأدلة)، الكود التالي يوضح كيفية استخدام التابعين:


// Remove first four item in ArrayList

coll.RemoveAt(0);

// Removes first four items in array list

coll.RemoveRange(0, 4);


كما يحوي الصف ArrayList على توابع أخرى مفيدة مثل التابع Clear الذي يقوم بإفراغ المجمع من كافة العناصر التي يحويها.
والتابع
IndexOf فهو مفيد من أجل معرفة رقم دليل (الفهرسة) لكائن ما، طبعا إن كان موجودا وفي حال أن الكائن لم يكن موجودا فإن التابع سيعيد القيمة -1.
التايع
Contain من اسمه يدل على أنه تابع يستخدم من أجل التحقق من وجود كائن ما ضمن المجمع، الكود التالي يوضح كيفية استخدام هذه التوابع:


string myString = “My String”;

if (coll.Contains(myString))

{

int index = coll.IndexOf(myString);

coll.RemoveAt(index);

}

else

{

coll.Clear();

}

كيفية استرجاع القيم المخزنة داخل المجمع:
يمكن استخدام الدليل لتحديد الكائن المراد ضمن المجمع كما في المثال التالي:

for (int i = 0; i < coll.Count; i++)

{

Console.WriteLine(coll[i]);

}


كما يمكن استخدام الواجهة IEnumerable وذلك من خلال التابع GetEnumerable حيث يعيد كائن من نوع الواجهة IEnumerable الذي يسمح لك بسهوله التنقل بين الكائنات المخزنة ضمن المجمع.

الجدول التالي يبين خصائص الواجهة IEnumerable:

Current (للقراءة) يعطي الكائن الحالي في المجمع.

الجدول التالي يوضح أهم الاجراءات الموجودة ضمن الواجهة IEnumerable:

MoveNext يقوم هذا التابع بالانتقال إلى الكائن التالي ضمن المجمع، ويحدد بنفس الوقت من خلال القيمة المنطقية التي يعيدها فيما إذا كان قد وصل إلى نهاية المجمع.
Reset هذا الاجراء يقوم بالانتقال إلى ما فبل الكائن الأول الموجود ضمن المجمع لكي يتيح للتابع MoveNext الوقوف على الكائن الأول ضمن المجمع.

المثال التالي يوضح كيفية الاستفادة من الواجهة IEnumerable:

IEnumerator enumerator = coll.GetEnumerator();

while (enumerator.MoveNext())

{

Console.WriteLine(enumerator.Current);

}


كما يمكن استخدام الحلقة foreach (مع جميع الصفوف التي تدعم الواجهة IEnumerable) التي تقدم ميزة هامة والتي هي إذا كنا نعلم نوع جميع الكائنات المخزنة في المجمع فإن استخدام الحلقة foreach سوف يوفر علينا عملية التحويل من object إلى نوع العناصر، المثال التالي يوضح ذلك:

ArrayList newColl = new ArrayList();

newColl.Add(“Hello”);

newColl.Add(“Goodbye”);

foreach (string item in newColl)

{

Console.WriteLine(item);

}


كما يمكن استخدام الواجهة IList، ICollection توضح فيما يلي كيفية استخدام الواجهة IList:


IList il = newColl;

for (int i = 0; i < il.Count; i++)

{

Console.WriteLine(il[i]);

}

ترتيب العناصر:

يحتوي الصف ArrayList على التابع Sort الذي يقوم بعملية ترتيب العناصر المخزنة داخل المجمع، يعتمد التابع Sort في عمله على الصف Comparer هذا الصف الذي بدوره يدعم الواجهة IComparer، هذه الواجهة تحوي تابع واحد فقط وهو Compare الذي يأخذ كائنين ويقارن بينهما الجدول التالي يوضح نتائج المقارنة:

الناتج أقل من الصفر يعني أن الكائن الذي على اليسار أقل من الكائن الذي على اليمين.
صفر الكائنين متساويين.
أكبر من الصفر الكائن الذي على اليسار أكبر من الكائن الذي على اليمين.

يمكنك القيام بعملية ترتيب عناصر المجموعة بتنفيذ التعليمة التالية:

coll.Sort();

كما يسمح لك التابع Sort بتخصيص الكائن الذي سيقوم بالترتيب، فبدلا من استخدام الصف Comparer سنستخدم الصف CaseInsensitiveComparer كما في المثال التالي:

coll.Sort(new CaseInsensitiveComparer());

كما بإمكانك أنت أن تعرف عملية المقارنة وذلك بإنشاء صفك الخاص وتوريثه من الواجهة IComprarer كما في المثال التالي:


class DescendingComparer : IComparer

{

#region IComparer Members

CaseInsensitiveComparer _comparer = new CaseInsensitiveComparer();

public int Compare(object x, object y)

{

return _comparer.Compare(y, x);

}

#endregion

}

الآن نقوم بعملية الترتيب باستخدام الصف الجديد المنشأ كما يلي:

coll.Sort(new DescendingComparer());

لا تنسونا من دعائكم


One thought on “الصف ArrayList

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s