البرنامج التعليمي لمجموعات C# مع أمثلة
⚡ ملخص ذكي
توفر المجموعات في لغة C# طريقة مرنة لتخزين وإدارة مجموعات من الكائنات. على عكس المصفوفات، تتوسع المجموعات وتتقلص أثناء التشغيل، وتوفر مساحات الأسماء System.Collections و System.Collections.Generic أنواعًا جاهزة للقوائم والقواميس والمكدسات والطوابير.

في درسنا السابق، تعلمنا كيف يمكننا استخدام المصفوفات في لغة C#. دعونا نلقي نظرة سريعة عليها، المصفوفات في البرمجة تستخدم لتجميع مجموعة من الكائنات ذات الصلة. لذا يمكن للمرء إنشاء مصفوفة أو مجموعة من الأعداد الصحيحة، والتي يمكن الوصول إليها عبر اسم متغير واحد.
ما هي المجموعات في C#؟
مجموعات مماثلة ل المصفوفاتفهو يوفر طريقة أكثر مرونة للعمل مع مجموعة من الكائنات.
في المصفوفات، كنت قد لاحظت أنك بحاجة إلى تحديد عدد العناصر في المصفوفة مسبقًا. كان لا بد من القيام بذلك عندما تم الإعلان عن المصفوفة.
لكن في المجموعة، لا تحتاج إلى تحديد حجم المجموعة مسبقًا. يمكنك إضافة عناصر أو حتى إزالة عناصر من المجموعة في أي وقت. سيركز هذا الفصل على كيفية العمل مع المجموعات المختلفة المتوفرة في لغة C#.
فئات System.Collections
يُصنّف إطار عمل .NET فئات المجموعات الأصلية غير العامة ضمن مساحة اسم System.Collections. يلخص الجدول أدناه الأنواع الرئيسية التي يمكنك استخدامها مباشرةً.
| التشكيلات | الوصف |
| ArrayList | مجموعة ArrayList تشبه المصفوفات نوع البيانات في C#. الاختلاف الأكبر هو الطبيعة الديناميكية لمجموعة قائمة المصفوفة. |
| كومة | تُعتبر المكدسة حالة خاصة من مجموعات البيانات التي تمثل مفهوم "آخر ما يدخل أول ما يخرج" (LIFO). |
| طوابير | تُعدّ قائمة الانتظار مجموعة خاصة تمثل مفهوم "الأول في الأول خارج". |
| جدول التجزئة | جدول التجزئة هو مجموعة خاصة تُستخدم لتخزين عناصر المفتاح والقيمة. |
| قائمة مرتبة | SortedList عبارة عن مجموعة تقوم بتخزين أزواج القيمة الرئيسية بترتيب تصاعدي للمفتاح افتراضيًا. |
| BitArray | مصفوفة البت هي مصفوفة من بنية البيانات التي تخزن البتات. |
المجموعات العامة في لغة C#
تُخزّن الفئات غير العامة المذكورة أعلاه كل عنصر ككائن عام، مما يعني أن المُصرّف لا يستطيع التحقق من النوع، ويتكبّد البرنامج تكلفة بسيطة لتغليف القيم. ولحل هذه المشكلة، أضافت لغة C# مساحة الاسم System.Collections.Generic، حيث ترتبط كل مجموعة بنوع مُعلن واحد.
مجموعة عامة مثل القائمة تقبل هذه الطريقة السلاسل النصية فقط، لذا يتم اكتشاف الأخطاء أثناء الترجمة ولا حاجة إلى تحويل الأنواع عند قراءة عنصر منها. هذا يجعل المجموعات العامة أكثر أمانًا وسرعة وسهولة في القراءة، ولذلك فهي الخيار الافتراضي في أكواد C# الحديثة.
فيما يلي قائمة بأكثر المجموعات العامة شيوعًا:
- قائمة : قائمة قابلة لتغيير الحجم تعتمد على الفهرس، وهي البديل العام لـ ArrayList.
- قاموس : يخزن أزواج المفاتيح والقيم مع عمليات بحث سريعة تعتمد على التجزئة.
- مجموعة التجزئة : يحتوي فقط على قيم فريدة ويدعم عمليات المجموعات مثل الاتحاد.
- طابور : مجموعة "الأولوية للأقدم"، وهي النسخة العامة من قائمة الانتظار.
- كومة : مجموعة "آخر ما يدخل أول ما يخرج"، وهي النسخة العامة من Stack.
- قائمة مرتبة : يحافظ على ترتيب أزواج المفاتيح والقيم حسب المفتاح بترتيب تصاعدي.
مثال على مجموعة قوائم بلغة C#
تُعدّ القائمة (List) أكثر أنواع المجموعات العامة استخدامًا لأنها تعمل كالمصفوفة الديناميكية. ينشئ المثال أدناه قائمة من السلاسل النصية، ويضيف إليها عناصر ويحذف أخرى، ويقرأ حجمها، ثم يطبع القيم المتبقية. كُتب الكود بالكامل في ملف Program.cs.
الخطوة 1) قم باستيراد مساحة الاسم System.Collections.Generic وقم بتعريف قائمة من السلاسل النصية.
الخطوة 2) أضف العناصر باستخدام طريقة الإضافة واحذف عنصرًا واحدًا باستخدام طريقة الحذف.
الخطوة 3) اقرأ خاصية العد، ثم قم بالمرور عبر القائمة باستخدام عبارة foreach.
using System; using System.Collections.Generic; namespace DemoApplication { class Program { static void Main(string[] args) { List<string> tutorials = new List<string>(); tutorials.Add("Java"); tutorials.Add("Python"); tutorials.Add("Kotlin"); tutorials.Remove("Python"); Console.WriteLine(tutorials.Count); foreach (string tutorial in tutorials) { Console.WriteLine(tutorial); } Console.ReadKey(); } } }
Code تفسير:-
- يتم استيراد مساحة الاسم System.Collections.Generic بحيث يكون نوع القائمة متاحًا للبرنامج.
- قائمة جديدة يتم إنشاء مجموعة تسمى "الدروس التعليمية"، ويتم إضافة ثلاثة أسماء باستخدام طريقة الإضافة.
- تقوم دالة Remove بحذف القيمة "Python"وهذا يترك عنصرين في القائمة".
- تقوم خاصية Count بإرجاع عدد العناصر، وتقوم حلقة foreach بطباعة كل قيمة متبقية بالترتيب.
عند تشغيل البرنامج، يقوم أولاً بطباعة عدد 2، تليها Java و كوتلن على أسطر منفصلة. يوضح هذا كيف يتغير حجم المجموعة أثناء التشغيل، وهو أمر لا يمكن للمصفوفة الثابتة القيام به.
الفرق بين المصفوفات والمجموعات في لغة C#
كلاهما مجموعة وتجميع العناصر ذات الصلة تحت اسم واحد، إلا أن سلوكها يختلف عند تشغيل البرنامج. معرفة متى تستخدم كلًا منهما يساعدك على كتابة كود أكثر وضوحًا وكفاءة.
فيما يلي أبرز الاختلافات:
- المقاس : المصفوفة لها طول ثابت يتم تحديده عند الإعلان عنها، بينما يمكن للمجموعة أن تنمو أو تتقلص في أي وقت.
- معالجة الأنواع: تخزن المصفوفة نوعًا واحدًا، بينما يمكن أن تكون المجموعة آمنة من حيث النوع مع الأنواع العامة أو تحتوي على كائنات من أنواع مختلطة عندما تكون غير عامة.
- المكان تم تضمين المصفوفات في اللغة، بينما توجد فئات المجموعات في مساحات الأسماء System.Collections و System.Collections.Generic.
- العمليات المدمجة: توفر المجموعات طرقًا جاهزة لإضافة العناصر وإزالتها والبحث عنها وفرزها، بينما توفر المصفوفات وصولًا أساسيًا مفهرسًا فقط.
- أفضل استخدام: اختر مصفوفة عندما يكون عدد العناصر معروفًا وثابتًا، ومجموعة عندما يتغير العدد أثناء تشغيل البرنامج.
باختصار، تعتبر المصفوفات هي الأفضل للبيانات ذات الحجم الثابت، بينما توفر المجموعات المرونة التي تحتاجها معظم التطبيقات الواقعية.
