LINQ SequenceEqual
LINQ SequenceEqual
في هذا الدرس، سنتعلّم استخدام دالة SequenceEqual() في LINQ، والتي تُستخدم لمقارنة تسلسلين (مثل القوائم أو المصفوفات) ومعرفة ما إذا كانا متطابقين تمامًا.
ما هي SequenceEqual؟
دالة SequenceEqual()
تقارن تسلسلين من العناصر وتتحقق من:
- أن عدد العناصر في كلا التسلسلين متساوٍ.
- أن كل عنصر في نفس الموضع متساوٍ.
الصيغة العامة:
bool result = sequence1.SequenceEqual(sequence2);
مثال 1: قائمتين بنفس العناصر والترتيب
List<int> list1 = new List<int>() { 1, 2, 3 };
List<int> list2 = new List<int>() { 1, 2, 3 };
bool areEqual = list1.SequenceEqual(list2);
Console.WriteLine(areEqual); // True
مثال 2: نفس العناصر لكن ترتيب مختلف
List<int> list1 = new List<int>() { 1, 2, 3 };
List<int> list2 = new List<int>() { 3, 2, 1 };
bool areEqual = list1.SequenceEqual(list2);
Console.WriteLine(areEqual); // False
الترتيب مهم جدًا في SequenceEqual()
.
مثال 3: طول مختلف = غير متساوي
List<int> list1 = new List<int>() { 1, 2, 3 };
List<int> list2 = new List<int>() { 1, 2 };
bool areEqual = list1.SequenceEqual(list2);
Console.WriteLine(areEqual); // False
مثال 4: مقارنة كائنات (Objects)
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
}
var students1 = new List<Student>
{
new Student { ID = 1, Name = "Ali" },
new Student { ID = 2, Name = "Sara" }
};
var students2 = new List<Student>
{
new Student { ID = 1, Name = "Ali" },
new Student { ID = 2, Name = "Sara" }
};
bool areEqual = students1.SequenceEqual(students2);
Console.WriteLine(areEqual); // False (لأن الكائنات مختلفة في الذاكرة)
حتى لو القيم متساوية، بدون مقارن مخصص، النتيجة False.
مثال 5: استخدام IEqualityComparer
public class StudentComparer : IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
{
return x.ID == y.ID && x.Name == y.Name;
}
public int GetHashCode(Student obj)
{
return obj.ID.GetHashCode() ^ obj.Name.GetHashCode();
}
}
bool areEqual = students1.SequenceEqual(students2, new StudentComparer());
Console.WriteLine(areEqual); // True
ملاحظات مهمة:
الحالة | النتيجة |
---|---|
نفس العناصر بنفس الترتيب | True |
نفس العناصر بترتيب مختلف | False |
كائنات بدون Comparer | False حتى لو القيم نفسها |
مع IEqualityComparer | يمكن ترجيع True بناءً على المنطق المخصص |
تعليقات
إرسال تعليق