القوائم في C#
القوائم List هي نوع من أنواع البيانات الشائعة الاستخدام في لغة C#.
وتتميز القوائم عن أنواع البيانات الأخرى مثل المصفوفات بمرونتها وسهولة التحكم فيها.
فهي ديناميكية, أي أنها لا تحتاج لتحديد الحجم, كما أنها تدعم إضافة البيانات ومسحها والبحث عنها وإدارتها بكل سهولة.
وكما هو الحال في المصفوفات, تتم عملية تخزين المتغيرات في القوائم على شكل جداول.
وكل متغير له رقمه الخاص في الجدول index حيث يتم الوصول إلى هذا المتغير في الجدول عن طريق رقمه مباشرة.
تعريف القوائم List
لتعريف قائمة List, أول شيء يجب القيام به هو استدعاء مجال الأسماء System.Collections.Generic;
تدعم القوائم كل أنواع البيانات كالسلاسل النصية string وكل الأرقام الصحيحة مثل int وكل الأرقام العشرية مثل double والقيم المنطقية bool وكذا بقية الأنواع المركبة الأخرى.
ويمكن تعريف القوائم بدون ملئها بالبيانات, كما يمكن تعريفها وملؤها بالبيانات في نفس الوقت.
لنلاحظ بعض الأمثلة:
using System;
using System.Collections.Generic;
namespace Example
{
class Program
{
static void Main(string[] args)
{
List
List
List
List
}
}
}
طباعة البيانات من القوائم
تتم طباعة البيانات من القوائم إما باستخدام الحلقات التكرارية المشروحة في الدروس السابقة, أو من خلال الفهرس الخاص بها.
نُذَكِر هنا أن الفهرس يبدأ من 0 أي أن القيمة الأولى في القائمة فهرسها 0, والقيمة الثانية فهرسها 1 وهكذا دواليك إلى نهاية القائمة.
مثال:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Example
{
class Program
{
static void Main(string[] args)
{
List
Console.WriteLine(names[0]); // الناتج Mohamad
Console.WriteLine(names[1]); // الناتج Anas
Console.WriteLine(names[4]); // الناتج Salim
}
}
}
التعرف على طول القوائم من خلال خاصية Count
يمكننا التعرف على طول أي قائمة باستخدام خاصية Count كما هو مبين في المثال التالي:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Example
{
class Program
{
static void Main(string[] args)
{
List
Console.WriteLine(names.Count); // الناتج 5
}
}
}
إضافة البيانات إلى القوائم
الإضافة إلى نهاية القائمة
تتم إضافة البيانات إلى نهاية القوائم سواء المعبأة مسبقا أو الفارغة باستعمال دالة Add.
مثال:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Example
{
class Program
{
static void Main(string[] args)
{
List
x.Add(2); // إضافة القيمة 2 إلى القائمة x
x.Add(3); // إضافة القيمة 3 إلى القائمة x
x.Add(5); // إضافة القيمة 5 إلى القائمة x
x.Add(7); // إضافة القيمة 7 إلى القائمة x
}
}
}
إضافة القيم إلى فهرس محدد في القائمة
لإدخال القيم في فهرس محدد في القوائم نستخدم دالة insert, والتي تتطلب منا أن ندخل الفهرس الذي سيشغله العنصر الذي نريد إدراجه, إضافة إلى العنصر نفسه.
مثال:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Example
{
class Program
{
static void Main(string[] args)
{
List
x.Insert(0, 199); // إضافة العنصر 199 إلى الفهرس 0 في القائمة
x.Insert(2, 10); // إضافة العنصر 10 إلى الفهرس 2 في القائمة
// طباعة العناصر لملاحظة الفرق
foreach (int i in x)
{
Console.WriteLine(i);
}
}
}
}
الناتج:
199
2
10
3
5
7
9
مسح البيانات من القوائم
يمكننا مسح عنصر واحد من القوائم باستخدام دالة remove, كما يمكننا تفريغ القائمة من كل العناصر باستخدام دالةة clear.
دالة remove
مثال:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Example
{
class Program
{
static void Main(string[] args)
{
List
x.Remove(9); // مسح العنصر 9 من القائمة
x.Remove(2); // مسح العنصر 2 من القائمة
// طباعة العناصر لملاحظة الفرق
foreach (int i in x)
{
Console.WriteLine(i);
}
}
}
}
الناتج:
3
5
7
دالة clear
مثال:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Example
{
class Program
{
static void Main(string[] args)
{
List
x.Clear(); // مسح كل عناصر القائمة
// طباعة طول القائمة لملاحظة الفرق
Console.WriteLine(x.Count);
}
}
}
الناتج
0
البحث في القوائم
يمكننا البحث في القوائم من خلال عدة طرق وباستخدام عدة دوال, فمثلا يمكننا البحث عن القيم من خلال الفهرس الخاص بها كما رأينا آنفا في هذا الدرس, كما يمكننا البحث باستعمال مجموعة من الدوال من بينها: Contains, و Find, و IndexOf, الخ.
دالة IndexOf
يتم استخدام دالة IndexOf لمعرفة فهرس عنصر محدد في القائمة, وهي ترجع متغيرا رقميا, كما أنه يجب الانتباه إلى أن الحساب يبدأ من 0 وليس من 1.
مثال:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Example
{
class Program
{
static void Main(string[] args)
{
List
Console.WriteLine(x.IndexOf(9)); // الناتج هو 4
List
Console.WriteLine(y.IndexOf("C")); // الناتج هو 2
}
}
}
دالة Contains
يتم استخدام دالة Contains للتحقق من وجود عنصر ما في القائمة, وهي ترجع متغير من نوع bool, أي أن الناتج إما يكون true إذا كان العنصر يوجد بالفعل في القائمة, أو false إذا كان العنصر غير موجود في القائمة.
مثال:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Example
{
class Program
{
static void Main(string[] args)
{
List
Console.WriteLine(x.Contains(5)); // الناتج هو true
Console.WriteLine(x.Contains(19)); // الناتج هو false
}
}
}
في الختام, يمكن القول أن القوائم تعتبر من أهم أنواع البيانات في لغة C#, فهي تمكننا من القيام بعدة عمليات من خلال الدوال التي تطرقنا إليها في هذا الدرس, وكذا مجموعة أخرى من الدوال المتقدمة سنخصص لها درسا منفصلا في قادم الأيام, خصوصا أنها تعتمد على عبارات Lambda (Lambda Expression).