English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل أساسي C#

دليل متقدم C#

مبادئ C# (OOP)

قائمة C#

List<T> هي مجموعة من العناصر القوية، يمكنك الوصول إليها عبر المؤشر، وتحتوي على طرق用于 ترتيب، البحث وتعديل القائمة. هي نسخة قابلة للتعريف من ArrayList في مساحة الأسماء System.Collection.Generic.

خصائص List<T>

  • List<T> متطابقة مع ArrayList، وهي قابلة للتطبيق لـ IList <T>.

  • يوجد في مساحة الأسماء System.Collection.Generic.

  • List<T> يمكن أن يحتوي على عناصر من نوع معين. يقدم التحقق من النوع في وقت التجميع، ولا يفعل التعبئة والتزيل لأنه قابلة للتعريف.

  • يمكنك إضافة العناصر باستخدام طريقة Add()، AddRange() أو لغة التجميع المبدئية (collection-initializer).

  • يمكنك الوصول إلى العناصر من خلال تمرير مؤشر، مثل myList[0]. يبدأ المؤشر من الصفر.

  • List<T> أسرع في الأداء من ArrayList، ويقل عدد الأخطاء.

إنشاء قائمة

List<T> هي مجموعة قابلة للتعريف، لذا تحتاج إلى تحديد نوع البيانات الذي يمكن أن يحتويه يمكنه تخزينه. يظهر المثال التالي كيفية إنشاء القائمة وإضافة العناصر.

List<int> primeNumbers = new List<int>();
primeNumbers.Add(1); // استخدام طريقة add() لإضافة العناصر
primeNumbers.Add(3);
primeNumbers.Add(5);
primeNumbers.Add(7);
var cities = new List<string>();
cities.Add("New York");
cities.Add("London");
cities.Add("Mumbai");
cities.Add("Chicago");
cities.Add(null); // يسمح قائمة الأنواع المفهومة بوجود null
// إضافة عناصر باستخدام جملة مبدأ مجموعة (collection-initializer)
var bigCities = new List<string>()
                    {
                        "New York",
                        "London",
                        "Mumbai",
                        "Chicago"                    
                    };

في المثال السابق،

List<int> primeNumbers = new List<int>();

إنشاء قائمة من نوع int. وبالمثل، القوائم cities و bigcity هي قوائم من نوع string. ثم يمكن استخدام طريقة add() أو جملة مبدأ مجموعة (collection-initializer) لإضافة عناصر إلى القائمة.

يمكن أيضًا استخدام جملة مبدأ مجموعة (collection-initializer) لضمان أعضاء الفئة المخصصة. في المثال أدناه، يتم إضافة أعضاء فئة Student إلى List <Student>.

var students = new List<Student>() { 
                new Student() { Id = 1, Name = "Bill"},
                new Student() { Id = 2, Name = "Steve"},
                new Student() { Id = 3, Name = "Ram"},
                new Student() { Id = 4, Name = "Abdul"}
            };

إضافة مصفوفة إلى قائمة List

يمكن استخدام طريقة AddRange() لضمان جميع العناصر في المصفوفة أو مجموعة أخرى إلى قائمة List.

توقيع AddRange():

 void AddRange(IEnumerable<T> collection)
string[] cities = new string[3]{ "Mumbai", "London", "New York" };
var popularCities = new List<string>();
// إضافة مصفوفة إلى القائمة
popularCities.AddRange(cities);
var favouriteCities = new List<string>();
// إضافة قائمة 
favouriteCities.AddRange(popularCities);

الوصول إلى قائمة List

يمكن الوصول إلى القائمة باستخدام المؤشرات، واللفافات for/foreach، واستخدام استعلامات LINQ. تبدأ أرقام القوائم من الصفر. يتم تقديم المؤشر في الدواليب لتحديد عنصر قائمة واحدة، كما في المصفوفات. يتم تمرير قائمة <T> للحصول على مجموعة List <T>.

List<int> numbers = new List<int>() { 1, 2, 5, 7, 8, 10 };
Console.WriteLine(numbers[0]); // تلوين1
Console.WriteLine(numbers[1]); // رقم 2
Console.WriteLine(numbers[2]); // رقم 5
Console.WriteLine(numbers[3]); // رقم 7
// استخدام طريقة foreach LINQ
numbers.ForEach(num => Console.WriteLine(num + ", "));// طباعة 1،2،5،7،8،10،
// استخدام دائرة for
for (int i = 0; i < numbers.Count; i++)
    Console.WriteLine(numbers[i]);

استخدام LINQ لفحص القائمة

List<T> تحقق من واجهة IEnumerable. لذلك، يمكننا استخدام لغة استعلام LINQ أو طريقة الاستعلام لاستعلام القائمة، كما هو موضح أدناه.

var students = new List<Student>() { 
                new Student() { Id = 1, Name = "Bill"},
                new Student() { Id = 2, Name = "Steve"},
                new Student() { Id = 3, Name = "Ram"},
                new Student() { Id = 4, Name = "Abdul"}
            };
// للحصول على جميع الطلاب الذين يدعون "Bill"
var result = from s in students
	     where s.Name == "Bill"
	     select s;
foreach (var student in result)
    Console.WriteLine(student.Id + ", " + student.Name);

إدراج العنصر في القائمة (List)

استخدام هذه الطريقة Insert() لإدراج العنصر في مجموعة List<T> في موقع الت索引 المحدد.

توقيع Insert():

void Insert(int index, T item);
var numbers = new List<int>{ 10, 20, 30, 40 };
numbers.Insert(1, 11); // إدراج 11 في أول مؤشر، بعد 10.
foreach (var num in numbers)
    Console.Write(num);

من حذف العنصر من القائمة (List)

استخدام Remove() لازالة العنصر الأول المحدد من مجموعة List<T>. باستخدام RemoveAt() لإزالة العنصر من المرتبة المحددة. إذا لم يكن هناك عنصر في المرتبة المحددة، فإنه سيكون له خطأ ArgumentOutOfRangeException.

توقيع Remove()

 bool Remove(T item)

توقيع RemoveAt()

void RemoveAt(int index)
var numbers = new List<int>{ 10, 20, 30, 40, 10 };
numbers.Remove(10); // إزالة 10 من القائمة
numbers.RemoveAt(2); // إزالة العنصر الثالث (الترقيم من البداية)
//numbers.RemoveAt(10); // يرتكب ArgumentOutOfRangeException
foreach (var el in intList)
    Console.Write(el); // يخرج 20 30

تحقق من عناصر القائمة (List)

استخدام Contains() لتحديد ما إذا كان العنصر موجودًا في قائمة <T>.

var numbers = new List<int>{ 10, 20, 30, 40 };
numbers.Contains(10); // يعود إلى true
numbers.Contains(11); // يعود إلى false
numbers.Contains(20); // يعود إلى true

هيكل قائمة <T>.

الشكل أدناه يوضح هيكل قائمة <T>.

خصائص وطرق قائمة <T>.

في الجدول أدناه، قائمة <T> المهمة من الخصائص والطرق:

خصائصطريقة الاستخدام
Itemsالحصول على أو تعيين العنصر في المرتبة المحددة.
Countعدد العناصر الموجودة في قائمة <T>.
الطريقةطريقة الاستخدام
Addأضف العنصر إلى نهاية قائمة <T>.
AddRangeأضف عناصر المجموعة المحددة إلى نهاية قائمة <T>.
BinarySearchابحث عن العنصر وعدد العنصر وإرجاعه.
Clearأزيل جميع العناصر من قائمة <T>.
Containsتحقق من وجود العنصر المحدد في قائمة <T>.
Findابحث عن العنصر الأول بناءً على الدالة الحكم المحددة.
Foreachاستعراض قائمة <T>.
إدراجإدراج العنصر في الموضع المحدد في قائمة <T>.
InsertRangeإدراج عناصر من مجموعة أخرى في الموضع المحدد.
Removeحذف المرة الأولى التي تظهر للعنصر المحدد.
RemoveAtحذف العنصر المحدد في الموضع المحدد.
RemoveRangeحذف جميع العناصر التي تتطابق مع الحكم المحدد.
Sortترتيب جميع العناصر.
TrimExcessضبط الحجم إلى عدد العناصر الفعلية.
TrueForAllتحديد ما إذا كان كل عنصر في قائمة <T> يتطابق مع الحالة المحددة من قبل الحكم المحدد.