C# - List
C# - List
List هي مجموعة collection, وهي ليست ثابتة الحجم مثل الـ Array, ولا تحتاج الـ List إلى إدارة حجمهامثل الـ Array فعند تعريف Array دون تحديد حجمها سوف يظهر الخطأ.
Error 1 Array creation must have array size or array initializer
string[] arr = new string[];
لذلك فالــ Array ذات حجم ثابت أما الـList فهي علي العكس لا تحتاج لذلك فهي ديناميكية الحجم مع العديد من الإجراءاتMethod. حتى وإن تم تعريف حجم للـ List.
الـ List تتعامل مع اي نوع من البيانات Data Type.
تعريف List
لنتمكن من استخدام الـ List لابد من استدعاء namespace
using System.Collections.Generic;
أشكال الـ List
List<int> degree = new List<int>();
List<string> Names = new List<string>();
List<Customer> customerList = new List<Customer>();
List<int> list = new List<int>();
list.Add(2);
list.Add(3);
list.Add(5);
list.Add(7);
هنا تعريف List ذات حجم ثابت 2, ولكن تذكر ان هذا الحجم لا تأخذ به الـ List و تتجاهله سوف نعطي مثال.
List<Employee> EmpList = new List<Employee>(2);
يمكن تعريف List باي نوع من أنواع البيانات Date Type int, string, doube, decimal أو أنواع مركبcomplex مثل class أوstruct.
استخدام Add Method
يتم إضافة عنصر داخل الـ List باستخدم Method Add.
مثال,
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Customer customer1 = new Customer() { ID = 1, Name = "Slah", Balance = 5200 };
Customer customer2 = new Customer() { ID = 2, Name = "Nasr", Balance = 3500 };
Customer customer3 = new Customer() { ID = 3, Name = "Mona", Balance = 1700 };
List<Customer> customerList = new List<Customer>(2);
customerList.Add(customer1);
customerList.Add(customer2);
customerList.Add(customer3);
}
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
}
}
}
لاسترجعاع اي Item من الـ List يتم ذلك باستخدام الفهرس Index
مثال,
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Customer customer1 = new Customer() { ID = 1, Name = "Slah", Balance = 5200 };
Customer customer2 = new Customer() { ID = 2, Name = "Nasr", Balance = 3500 };
Customer customer3 = new Customer() { ID = 3, Name = "Mona", Balance = 1700 };
List<Customer> customerList = new List<Customer>(2);
customerList.Add(customer1);
customerList.Add(customer2);
customerList.Add(customer3);
// Retrieve item by index
Customer c = customerList[2];
Console.WriteLine("Id = {0} Name= {1} Balance= {2}", c.ID, c.Name, c.Balance);
}
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
}
}
}
استخدام foreach لطباعة جميع الـItems List
مثال,
مثال,
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Customer customer1 = new Customer() { ID = 1, Name = "Slah", Balance = 5200 };
Customer customer2 = new Customer() { ID = 2, Name = "Nasr", Balance = 3500 };
Customer customer3 = new Customer() { ID = 3, Name = "Mona", Balance = 1700 };
List<Customer> customerList = new List<Customer>(2);
customerList.Add(customer1);
customerList.Add(customer2);
customerList.Add(customer3);
foreach (Customer item in customerList)
{
Console.WriteLine("Id = {0} Name= {1} Balance= {2}", item.ID, item.Name, item.Balance);
}
}
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
}
}
}
النتيجة:
استخدام for لطباعة جميع الـItems List
مثال,
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Customer customer1 = new Customer() { ID = 1, Name = "Slah", Balance = 5200 };
Customer customer2 = new Customer() { ID = 2, Name = "Nasr", Balance = 3500 };
Customer customer3 = new Customer() { ID = 3, Name = "Mona", Balance = 1700 };
List<Customer> custLst = new List<Customer>(2);
custLst.Add(customer1);
custLst.Add(customer2);
custLst.Add(customer3);
for (int i = 0; i < custLst.Count; i ++ )
{
Customer c = custLst[i];
Console.WriteLine("Id = {0} Name= {1} Balance= {2}", c.ID, c.Name, c.Balance);
}
}
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
}
}
}
النتيجة:
Strongly Type
ما معنى Strongly Type نوع قوي لناخذ مثال,
List<Customer> custLst = new List<Customer>(2);
custLst.Add(customer1);
custLst.Add(customer2);
custLst.Add(customer3);
custLst.Add(77);
في هذا المثال احاول إضافة عنصر جديد إلى الـ List وهو الرقم 77 ولكن إذا نظرنا في الصورة التالية نلاحظ أنList<Customer> تأخد النوع Customer ونحن نقوم بإضافة الرقم 77 وهو من النوع int فسوف يحدث خطأ ولن تقبل الـ Listبيانات من النوع int. وهذا هو مفهوم الـ Strongly Type.
Error 1 The best overloaded method match for 'System.Collections.Generic.List<ConsoleApplication.Program.Customer>.Add(ConsoleApplication.Program.Customer)'
Error 2 Argument 1: cannot convert from 'int' to 'ConsoleApplication.Program.Customer'
استخدام Insert Method
تسخدم Insert Method لإضافة عنصر بموقع معين نقوم نحن بتحديدة مثلا نريد إضافة عنصر جديد ويكون هو أول عنصر داخل الـ List مع وجود عناصر سابقة داخل الـ List.
مثال,
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Customer customer1 = new Customer() { ID = 1, Name = "Slah", Balance = 5200 };
Customer customer2 = new Customer() { ID = 2, Name = "Nasr", Balance = 3500 };
Customer customer3 = new Customer() { ID = 3, Name = "Mona", Balance = 1700 };
List<Customer> custLst = new List<Customer>(2);
custLst.Add(customer1);
custLst.Add(customer2);
custLst.Add(customer3);
custLst.Insert(0, customer3);
foreach (Customer c in custLst)
{
Console.WriteLine(c.ID + " " + c.Name + " " + c.Balance );
}
}
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
}
}
}
في هذا السطر
custLst.Insert(0, customer3);
قمنا بإضافة العنصر customer3 في الموقع 0 اي في اول القائمة فانلاحظ وجودة مرتين في الأول و الاخر.
استخدام IndexOf
تستخدم IndexOf Method لمعرفة رقم الفرس index الخاص بعنصر محدد.
مثال,
static void Main(string[] args)
{
Customer customer1 = new Customer() { ID = 1, Name = "Slah", Balance = 5200 };
Customer customer2 = new Customer() { ID = 2, Name = "Nasr", Balance = 3500 };
Customer customer3 = new Customer() { ID = 3, Name = "Mona", Balance = 1700 };
List<Customer> custLst = new List<Customer>(2);
custLst.Add(customer1);
custLst.Add(customer2);
custLst.Add(customer3);
int i = custLst.IndexOf(customer2);
Console.WriteLine(i);
}
النتيجة:
استخدام Contains Method
تستخدام Contains Method لحديد ما إذا كان عنصر معين موجود داخل الـ List ام لا. تقوم بإرجاع النوع bool. إذا رجع بالقيمةtrue تم العثور علي العنصر داخل الـ List Collection والعكس صحيح.
مثال,
مثال,
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Customer customer1 = new Customer() { ID = 1, Name = "Slah", Balance = 5200 };
Customer customer2 = new Customer() { ID = 2, Name = "Nasr", Balance = 3500 };
Customer customer3 = new Customer() { ID = 3, Name = "Mona", Balance = 1700 };
List<Customer> custLst = new List<Customer>(2);
custLst.Add(customer1);
custLst.Add(customer2);
//custLst.Add(customer3);
if (custLst.Contains(customer3))
Console.WriteLine("Exist");
else
Console.WriteLine("Not Exist");
}
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
}
}
}
النتيجة:
استخدام Exists Method
مثال,
مثال,
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Customer customer1 = new Customer() { ID = 1, Name = "Slah", Balance = 5200 };
Customer customer2 = new Customer() { ID = 2, Name = "Nasr", Balance = 3500 };
Customer customer3 = new Customer() { ID = 3, Name = "Mona", Balance = 1700 };
List<Customer> custLst = new List<Customer>(2);
custLst.Add(customer1);
custLst.Add(customer2);
custLst.Add(customer3);
if (custLst.Exists(cust => cust.Name.StartsWith("M") ))
Console.WriteLine("Exist");
else
Console.WriteLine("Not Exist");
}
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
}
}
}
استخدام Find Method
تستخدم للبحث عن عنصر أو قيمة داخال الـ List وغاليا ما نستخدم Lambda Expression
مثال,
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Customer customer1 = new Customer() { ID = 1, Name = "Masrour", Balance = 5200 };
Customer customer2 = new Customer() { ID = 2, Name = "Abd Allah", Balance = 3500 };
Customer customer3 = new Customer() { ID = 3, Name = "Aseel", Balance = 1700 };
List<Customer> custLst = new List<Customer>(2);
custLst.Add(customer1);
custLst.Add(customer2);
custLst.Add(customer3);
Customer c = custLst.Find(cust => cust.Balance > 2000);
Console.WriteLine("ID= {0} Name= {1} Balance= {2}", c.ID, c.Name, c.Balance);
}
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
}
}
}
استخدام FindLast Method
تسخدم للبحث عن عنصر يطابق الشرط باستخدام التعبيرات Lambda Expression وإرجاع آخر عنصر مطابق من الـ List.
مثال,
مثال,
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Customer customer1 = new Customer() { ID = 1, Name = "Masrour", Balance = 5200 };
Customer customer2 = new Customer() { ID = 2, Name = "Abd Allah", Balance = 3500 };
Customer customer3 = new Customer() { ID = 3, Name = "Aseel", Balance = 1700 };
List<Customer> custLst = new List<Customer>(2);
custLst.Add(customer1);
custLst.Add(customer2);
custLst.Add(customer3);
Customer c = custLst.FindLast(cust => cust.Balance > 2000);
Console.WriteLine("ID= {0} Name= {1} Balance= {2}", c.ID, c.Name, c.Balance);
}
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
}
}
}
النتيجة:
استخدام FindAll Method
تسخدم للبحث عن عنصر يطابق الشرط باستخدام التعبيرات Lambda Expression وإرجاع كل العنصر المطابقة من الـ List.
مثال,
مثال,
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Customer customer1 = new Customer() { ID = 1, Name = "Masrour", Balance = 5200 };
Customer customer2 = new Customer() { ID = 2, Name = "Abd Allah", Balance = 3500 };
Customer customer3 = new Customer() { ID = 3, Name = "Aseel", Balance = 1700 };
List<Customer> custLst = new List<Customer>(2);
custLst.Add(customer1);
custLst.Add(customer2);
custLst.Add(customer3);
List<Customer> customers = custLst.FindAll(cust => cust.Balance > 2000);
foreach (Customer c in customers)
{
Console.WriteLine("ID= {0} Name= {1} Balance= {2}", c.ID, c.Name, c.Balance);
}
}
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
}
}
}
استخدام FindIndex
تسخدم لمعرفة رقم الـ Index للعنصر المحدد باستخدام التعبيرات Lambda Expression.
مثال,
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Customer customer1 = new Customer() { ID = 1, Name = "Masrour", Balance = 5200 };
Customer customer2 = new Customer() { ID = 2, Name = "Abd Allah", Balance = 3500 };
Customer customer3 = new Customer() { ID = 3, Name = "Aseel", Balance = 1700 };
List<Customer> custLst = new List<Customer>(2);
custLst.Add(customer1);
custLst.Add(customer2);
custLst.Add(customer3);
int index = custLst.FindIndex(cut => cut.Balance < 3500);
Console.WriteLine("Index= {0}", index);
}
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
}
}
}
النتيجة:
التحويل من Array إلى List باستخدام ToList() Method
مثال,
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Employee employee1 = new Employee() { ID = 1, Name = "Nader", Balance = 5200 };
Employee employee2 = new Employee() { ID = 2, Name = "Khaled", Balance = 3500 };
Employee employee3 = new Employee() { ID = 3, Name = "Saoudy", Balance = 1700 };
Employee[] employeesArray = new Employee[3];
employeesArray[0] = employee1;
employeesArray[1] = employee2;
employeesArray[2] = employee3;
//Convert From Arrat To List
List<Employee> employeeList = employeesArray.ToList();
foreach (Employee item in employeeList)
{
Console.WriteLine("ID= {0} Name= {1} Balance = {2}", item.ID, item.Name, item.Balance);
}
}
public class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
}
}
}
النتيجة:
التحويل من List إلى Array باستخدام ToArray() Method
مثال,
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Employee employee1 = new Employee() { ID = 1, Name = "Nader", Balance = 5200 };
Employee employee2 = new Employee() { ID = 2, Name = "Khaled", Balance = 3500 };
Employee employee3 = new Employee() { ID = 3, Name = "Saoudy", Balance = 1700 };
List<Employee> empList = new List<Employee>();
empList.Add(employee1);
empList.Add(employee2);
empList.Add(employee3);
//Convert From List To Array
Employee[] employees = empList.ToArray();
foreach (Employee item in employees)
{
Console.WriteLine("ID= {0} Name= {1} Balance = {2}", item.ID, item.Name, item.Balance);
}
}
public class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
}
}
}
النتيجة هي نفس نتيجة المثال السابق.
التحويل من List إلىDictionary باستخدام ToDictionaryList() Method
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Employee employee1 = new Employee() { ID = 1, Name = "Nader", Balance = 5200 };
Employee employee2 = new Employee() { ID = 2, Name = "Khaled", Balance = 3500 };
Employee employee3 = new Employee() { ID = 3, Name = "Saoudy", Balance = 1700 };
List<Employee> empList = new List<Employee>();
empList.Add(employee1);
empList.Add(employee2);
empList.Add(employee3);
//Convert From List To Dictionary
Dictionary<int, Employee> dicEmp = empList.ToDictionary(x => x.ID);
foreach (KeyValuePair<int,Employee> item in dicEmp)
{
Employee em = item.Value;
Console.WriteLine("ID= {0} Name= {1} Balance = {2}", em.ID, em.Name, em.Balance);
}
}
public class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public double Balance { get; set; }
}
}
}
النتيجة:
استخدام Clear Method - Count() Method
من اسمها تستخدم لمسح جميع عناصر الـ List. تم تعريف List من ثلاث عناصر ثم استخدمنا الإجراء Count() Methodلمعرفة عدد العناصر الموجود بالفعل داخل الـ List ثم بعد ذلك استخدمنا الإجراء Clear() Method لحذف جميع عناصر الـ Listوقمنا بطباعة عدد عناصر الـ List مرة إخر.
مثال,
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
List<string> listAnimals = new List<string>();
listAnimals.Add("Dog");
listAnimals.Add("Cat");
listAnimals.Add("Mouse");
Console.WriteLine("Animal Count = {0}", listAnimals.Count);
listAnimals.Clear();
Console.WriteLine("Animal Count = {0}", listAnimals.Count);
}
}
}
النتيجة:
أضف تعليق:
0 comments: