الـ Class Array في لغة C#
ماهو الـ Class ِArray في لغة C# ..؟! ما هي الخصائص المصفوفات Array المتوفرة في Class Array ..؟! ما هي الدوال Methods الموجودة في Class Array وكيف يتم استخدامها مع المصفوفات..؟!
المصفوفات Arrays من هياكل بيانات القوية في لغة سي شارب تسمح للمطورين بتخزين وتنظيم مجموعات البيانات بشكل فعال. كما إن إتقان استخدام المصفوفات في لغة سي شارب يعتبر مهمًا للمبرمجين لتطوير تطبيقات قوية وفعالة. و للتعامل مع المصفوفات Arrays بسلاسة وسهولة، توفر لغة C# كلاس خاص للعمل مع المصفوفات وهو Class Array ، نتعرف في هذا المقال على طريقة عمل Class Array مع المصفوفات. لنبدأ…
في هذا المقال نتعرف على :
- ما هو الـ Class Array ؟
- ما هي الخصائص Properties فى Class Array ؟
- أهم الدوال Methods المتوفرة في Class Array.
ما هو Class Array ؟
تعتبر المصفوفات Arrays نوع من أنواع هياكل البيانات(Data structure) أي لها خصائص Properties ودوال Methods (انظر مقال مقدمة الى Data Structure).وفي C# تتوفر مكتبة (Namespace) باسم System.Collections للتعامل مع الأنواع الـ Data structure المختلفة .
الـ Class Array لا يعد جزء من System.Collections namespace إلا أنه يعتبر الـ Class الأساسي لتطبيقات سي شارب التي تعتمد على المصفوفات Arrays . فهو يوفر مجموعة من الخصائص Properties والدوال Methods تقوم بعمليات إنشاء المصفوفات ومعالجتها من بحث وفرز وفي ما يلي شرح لأهم الخصائص والدوال للـ Class Array .
ما هي الخصائص Properties فى Class Array ؟
يوفر Class Array عدد من الخصائص Properties التي تستخدم لاسترجاع معلومات عن المصفوفة Array ، ومن هذه الخصائص ما يلي:
- Length وترجع قيمة تمثل طول المصفوفة أي عدد العناصر في المصفوفة.
- LongLength ترجع العدد لكامل العناصر لكافة أبعاد المصفوفة.
- Rank وترجع عدد ابعاد Number of dimensions مثلاً إن كنات المصفوفة من بعد واحد 1D سوف ترجع رقم 1 , وان كانت المصفوفة من بعدين 2D سوف ترجع 2.
- IsSynchronized ترجع قيمة تشير إلى ما إذا كان الوصول إلى المصفوفة متزامنًا (مؤشر ترابط آمن thread safe).
- SyncRoot ترجع Object يمكن استخدامه لمزامنة الوصول إلى المصفوفة.
- IsReadOnly خاصية تتحقق من الـ Array تقرأ فقط وهي دائماً ترجع قيمة خاطئة False.
- IsFixedSize خاصية التحقق من أن للـ Array طول ثابت هذه الخاصية دائماً ترجع قيمة صحيحة True.
وهنا مثال يوضح طريقة استخدام خصائص (Properties) الـ Class Array مع المصفوفات Arrays:
...........
int[] arr1 = {1, 2, 3, 4, 5};
// Two-dimensional array
int[, ] arr2 = new int[, ] { { 1, 2 },{ 3, 4 },{ 5, 6 },{ 7, 8 } };
// using Length property
Console.WriteLine(arr1.Length);
//using LongLength property
Console.WriteLine(arr2.LongLength);
// using Rank Property
Console.WriteLine("Dimension of arr1 is: {0}\nDimension of arr2 is: {1} " ,arr1.Rank , arr2.Rank) ;
//check whether is array has fixed size or not
Console.WriteLine("Check the fixed size property: " + arr1.IsFixedSize);
// check whether is the array read only or not
Console.WriteLine("Check the Read Only property: " + arr1.IsReadOnly);
// check whether the array is synchronized (thread safe) or no
Console.WriteLine(" Check the array has synchronized (thread safe): " + arr1.IsSynchronized);
// Using the SyncRoot property
lock(arr1.SyncRoot)
{
foreach(Object i in arr1)
{
Console.Write(i +"\t");
}
...........
لاحظ/ ي النتائج للمثال :
5 8 Dimension of arr1 is: 1 Dimension of arr2 is: 2 Check the fixed size property: True Check the Read Only property: False Check the array has synchronized (thread safe): False 1 2 3 4 5
أهم الدوال Methods المتوفرة في Class Array
ويوفر Class Array مجموعة من الدوال Methods التي تسهل إجراء العمليات على المصفوفات مثل عمليات النسخ والبحث والتعديل على المصفوفات Array وفيما وشرح تطبيق العمليات التي يمكن إجراؤها على المصفوفات Arrays، وهذه العمليات هي:
- تغيير حجم المصفوفة Array.
- البحث عن عنصر في المصفوفة Array .
- ترتيب العناصر في المصفوفة Array .
- نسخ المصفوفات Array.
- حذف عناصر من مصفوفة Array .
تغيير حجم المصفوفة Array
بالرغم من أن المصفوفات عبارة عن Objects ذات طول ثابت، إلا أن Class Array يوفر دالة تمكننا من تغيير حجم المصفوفة وهي الدالة Resize() . حيث يتم إرسال اسم المصفوفة و الطول الجديد للدالة Resize وتقوم الدالة Resize بالتالي:
- إنشاء مصفوفة جديدة بالطول الجديد.
- نسخ المصفوفة القديمة إلى المصفوفة الجديدة.
- ضبط المصفوفة القديمة للإشارة إلى المصفوفة الجديدة.
ويتم اقتطاع أي محتوى لا يتناسب مع المصفوفة الجديدة .ويوضح المثال التالي طريقة استخدام الدالة Resize() مع المصفوفات Arrays :
...........
// declaring and initializing an array with a specified value for each element
int [] array = {1, 2 , 3};
Array.Resize( ref array, 5); //resize the array length to 5
Console.WriteLine("{0} {1,8}","index","value");
for(int i = 0; i < array.Length; i++)
Console.WriteLine("{0,5} {1,8}", i ,array[i]);
//Now resize the array length to 3
Array.Resize(ref array, 3);
Console.WriteLine("{0} {1,8}","index","value");
for(int i = 0; i < array.Length; i++)
Console.WriteLine("{0,5} {1,8}", i ,array[i]);
...........
لتكـن النتيـجـة
index value 0 1 1 2 2 3 3 0 4 0 index value 0 1 1 2 2 3
في المثال قمنا بتعريف مصفوفة رقمية تحتوي على 3 عناصر ثم قمنا بتعديل طول المصفوفة إلى 5 أي قمنا بإضافة عنصرين ونلاحظ أن العناصر المضافة أضيفت في نهاية المصفوفة وتأخذ القيمة الافتراضية .
ثم قمنا بتعديل طول المصفوفة الى 3 وهنا تم حذف عنصرين وتمت عملية الحذف للعناصر الأخيرة من المصفوفة. كما يتضح في نتيجة المثال أي أن الدالة Resize() عندما تقوم ينسخ المصفوفة الى مصفوفة جديدة تقوم بحذف أو إضافة عناصر جديدة على المصفوفة القديمة وفي حال إضافة عناصر جديدة سوف يتم تعيين القيم الافتراضية للعناصر الجديدة.
البحث عن عنصر في المصفوفة Array
يوفر Class Array مجموعة من الدوال التي تجري عملية البحث على قيم عناصر المصفوفة فبعض الدوال تقوم بالتحقق من وجود قيمة معينة في المصفوفة و البعض منها يقوم بإرجاع القيمة المراد المبحوث عنها وأخرى ترجع ترتيب العنصر الذي يمثل القيمة المبحوث عنها ومن هذه الدوال التالي :
الدالة Exists()
وتقوم الدالة Exists() بالتحقق إذا كان القيمة المبحوث عنها موجود في المصفوفة أو لا. فهي تقوم بإرجاع قيمة True في حال كانت القيمة المبحوث عنها موجودة في المصفوفة و False في حال لم تكن موجودة. ويوضح المثال التالي طريقة استخدام الدالة Exists() من Class Array عبر تعليمات سي شارب :
لاحظ /ي المثال التالي :
...........
int [] arr = {5, 2, 3, 1 ,0};
Console.WriteLine("Check if an element in the arr : " + Array.Exists( arr, item => item == 3));
Console.WriteLine("Check if an element in the arr : " + Array.Exists( arr, item => item == 9));
...........
لتكـن النتيـجـة
Check if an element in the arr : True Check if an element in the arr : False
الدالة Find()
الدالة Find() وتقوم بالبحث عن قيمة معينة في المصفوفة وترجع قيمة عنصر المصفوفة المطابق للقيمة المبحوث عنها و إن لم إن لم توجد القيمة البحث في المصفوفة ستقوم Find() بإرجاع 0 .ويوضح المثال التالي طريقة استخدام الدالة Find() مع المصفوفات في سي شارب :
لاحظ /ي المثال التالي :
...........
int [] arr = {5, 2, 3, 1 ,0};
Console.WriteLine("Check if an element in the arr : " + Array.Find( arr, item => item == 3));
Console.WriteLine("Check if an element in the arr : " + Array.Find( arr, item => item == 9));
...........
لتكـن النتيـجـة
Check if an element in the arr : 3 Check if an element in the arr : 0
الدالة FindLast()
من دوال البحث التي يوفرها Class Array الدالة FindLast() حيث تقوم بإرجاع قيمة أخر عنصر مطابق للقيمة المبحوث عنها في المصفوفة وترجع 0 في لم تكن قيمة البحث موجودة في المصفوفة. ويوضح المثال التالي طريقة استخدام الدالة FindLast() مع المصفوفات في سي شارب:
...........
int [] arr = {5, 2, 3, 1 ,0, 1};
Console.WriteLine("Check if an element in the arr : " + Array.FindLast( arr, item => item == 1));
Console.WriteLine("Check if an element in the arr : " + Array.FindLast( arr, item => item == 9));
...........
لتكـن النتيـجـة
Check if an element in the arr : 1 Check if an element in the arr : 0
الدالة FindAll()
وأيضاً من دوال البحث المتوفرة في Class Array الدالة FindAll() والتي تقوم بإرجاع مصفوفة بكل العناصر المطابقة للقيمة المبحوث عنها. ويوضح المثال التالي طريقة عمل الدالة FindAll() مع المصفوفات في سي شارب :
...........
int[] arr = {2, 9, 6 , 9, 8};
//Return all matching the elements
int []array1 = Array.FindAll( arr, item => item == 9);
foreach(int value in array1)
Console.Write(value +" ");
...........
الدالتين FindIndex() و FindLastIndex()
من دوال البحث المتوفرة في Class Array الدالتين FindIndex() و FindLastIndex() اللتان تعملان مع المصفوفات وتقومان بإرجاع ترتيب العنصر (Index) المطابق للقيمة المبحوث عنها في المصفوفة أو إرجاع 1- في حال عدم وجود مطابقة .
الفرق أن FindIndex سترجع الترتيب (Index) الأول عنصر مطابق بينما ترجع FindLastIndex التريب (Index) لآخر عنصر مطابق . لاحظ /ي المثال التالي الذي يوضح الفرق بين طريقة عمل الدالتين FindIndex() و FindLastIndex() :
...........
int [] arr = {5, 2, 3, 1 ,0, 1};
//Using FindIndex
Console.WriteLine("Return the index of 1 : " + Array.FindIndex( arr, item => item == 1));
Console.WriteLine("Return the index of 9 : " + Array.FindIndex( arr, item => item == 9));
//Using FindLast
Console.WriteLine("Return the last index of 1 : " + Array.FindLastIndex( arr, item => item == 1));
Console.WriteLine("Return the last index of 9 : " + Array.FindLastIndex( arr, item => item == 9));
...........
لتكـن النتيـجـة
Return the index of 1 : 3 Return the index of 9 : -1 Return the last index of 1 : 5 Return the last index of 9 : -1
الدالتين IndexOf() و LastIndexOf()
كما يوفر Class Array الدالتين IndexOf() و LastIndexOf() للعمل مع المصفوفات والتان تقومان بإرجاع ترتيب عنصر البحث بنفس طريقة عمل الدوال FindIndex() و FindLastIndex() . ويوضح المثال التالي طريقة عمل الدوال IndexOf() و LastIndexOf() مع المصفوفات في سي شارب :
...........
int [] arr = {5, 2, 3, 1 ,0, 1};
//Using IndexOf
Console.WriteLine("Return index of 1 : " +Array.IndexOf(arr, 1));
Console.WriteLine("Return index of 9 : " + Array.IndexOf(arr, 9));
//Using LastIndexOf
Console.WriteLine("Return last index of 1 : " +Array.LastIndexOf(arr, 1));
Console.WriteLine("Return last index of 9: " + Array.LastIndexOf(arr, 9));
...........
لتكـن النتيـجـة
Return index of 1 : 3 Return index of 9 : -1 Return last index of 1 : 5 Return last index of 9: -1
ترتيب العناصر في المصفوفة Array
لترتيب عناصر المصفوفات Arrays يوفر Class Array الدوال Sort() و Reverse() ، وتعمل الدالتين على ترتيب القيم لعناصر المصفوفة وكلا منهما لها طريقة ترتيب معينة لنرى:
الدالة Sort()
تعمل الدالة Sort() مع المصفوفات أحادية البعد و تقوم بترتيب عناصر المصفوفة تصاعدياً. ويوضح المثال التالي طريقة عمل الدالة Sort() مع المصفوفات في سي شارب :
...........
int [] arr = {5, 2, 3, 1 ,0};
Array.Sort(arr);
foreach(int value in arr)
Console.Write( value + " ");
...........
لتكـن النتيـجـة
0 1 2 3 5
الدالة Reverse()
وتعمل Reverse() ايضاً مع المصفوفات أحادية البعد وتقوم بعكس الترتيب الحالي للعناصر المصفوفة، ويوضح المثال التالي طريقة عمل الدالة Reverse() مع المصفوفات في سي شارب:
...........
int [] arr0 = {5, 2, 3, 1 ,0};
int [] arr1 = {2, 1,6 , 9, 8};
//Sort the arr0
Array.Sort(arr0);
foreach(int value in arr0)
Console.Write( value + " ");
Console.WriteLine();
//Reverse the arr0
Array.Reverse(arr0);
foreach(int value in arr0)
Console.Write( value + " ");
Console.WriteLine();
//Reverse the arr1
Array.Reverse(arr1);
foreach(int value in arr1)
Console.Write( value + " ");
...........
لتكـن النتيـجـة
0 1 2 3 5 5 3 2 1 0 8 9 6 1 2
نسخ المصفوفات Array
الدالة CopyTo()
يوفر Class Array الدالة CopyTo() التي تعمل مع المصفوفات احادية البعد و تقوم بنسخ عناصر مصفوفة أحادية البعد الى مصفوفة أخرى أحادية البعد وبنفس الطول. ويوضح المثال طريقة نسخ المصفوفات بواسطة الدالة CopyTo() في سي شارب :
...........
int [] arr0 = {5, 2, 3, 1 ,0};
int[] arr1 = {1, 2, 3, 4, 5};
//Using CopyTo() method for copy arr0 to arr1
arr0.CopyTo(arr1,0);
foreach(int value in arr1)
Console.Write( value + " ")
...........
لتكـن النتيـجـة
5 2 3 1 0
حذف عناصر المصفوفة Array
الدالة Clear()
تتيح سي شارب حذف عناصر المصفوفة بواسطة الدالة Clear() من Class Array وتستخدم الدالة Clear() لحذف عنصر واحد أو عناصر معينة من المصفوفة أو لحذف جميع عناصر المصفوفة.
ملاحظة : الحذف هنا لا يكون بحذف العنصر من المصفوفة وإنما إرجاع العنصر للقيمة الإفتراضية بحسب نوع البيانات للمصفوفة. ويوضح المثال التالي طريقة استخدام الدالة Clear() مع لحذف عناصر المصفوفة في سي شارب :
...........
int [] arr0 = {5, 2, 3, 1 ,0};
int[] arr1 = {2, 1, 6 , 9, 8 , 3, 7, 10};
//Using Clear() method to remove all array elements
Array.Clear(arr0);
foreach(int value in arr0)
Console.Write( value + " ");
Console.WriteLine();
//Using Clear() method to remove specific elements from array
/*Here the method will take two more arguments
- the index of an element that will be started removing from,
-and the number of elements that would be removed */
Array.Clear(arr1, 2, 3);
foreach(int value in arr1)
Console.Write( value + " ");
...........
لتكـن النتيـجـة
0 0 0 0 0 2 1 0 0 0 3 7 10
ملاحظة: يعامل المتغيرمن نوع String معاملة Object أيضاً، و الخصائص Properties الدوال Methods المذكورة في هذا المقال تعمل مع String تماما كما تعمل مع مصفوفة أحادية البعد.
أمثلة المقال متوفرة بالكامل هنا.
إلى هنا ينتهي هذا المقال الذي تعرفنا فيه على طريقة العمل مع Class Array في C# وأهم الخصائص Properties الدوال Methods التي يوفرها Class Array للعمل مع المصفوفات Array في لغة سي شارب ، مع أمثلة تطبيقية على طريقة استخدام الدوال والخصائص للـ Class Array مع المصفوفات.