أسرع طريقة للعثور على العناصر المشتركة عبر عدة قوائم في C#
عند العمل مع المجموعات في C#، قد تواجه مواقف تحتاج فيها إلى العثور على عناصر مشتركة عبر عدة قوائم. يعد هذا مفيدًا بشكل خاص عندما تريد تصفية النتائج بناءً على معايير محددة. في منشور المدونة هذا، سنتناول سيناريو شائعًا: كيفية تحديد مجموعة فرعية من كائنات Option
التي تظهر في كل قائمة ضمن مجموعة قوائم.
مشكلة البيان
تخيل أنك تمتلك مجموعة من القوائم، وتحديدًا هيكل مثل List<List<Option>> optionLists
. تحتاج إلى تحديد أي من كائنات Option
موجودة في جميع القوائم N
. لحل هذه المشكلة، يجب أن نكون على علم بأن المساواة بين كائنات Option
تحددها خاصية سلسلة محددة، مثل option1.Value == option2.Value
. في النهاية، نريد إرجاع List<Option>
حيث يظهر كل عنصر مرة واحدة فقط.
الحل: العثور على الخيارات المشتركة
لمعالجة هذه المشكلة، يمكننا استخدام LINQ (استعلام متكامل من اللغة) في C#. يوفر LINQ طريقة قوية لاستعلام المجموعات، مما يجعله مثاليًا لحالتنا. أدناه يوجد مقتطف كود فعال ينفذ هذه المهمة:
var x = from list in optionLists
from option in list
where optionLists.All(l => l.Any(o => o.Value == option.Value))
orderby option.Value
select option;
شرح الكود
لنحلل استعلام LINQ خطوة بخطوة:
-
عبارة From الخارجية: تؤدي الجزء الأول
from list in optionLists
إلى تكرار كل قائمة في قائمة القوائم الرئيسية لدينا (optionLists
). -
عبارة From الداخلية: تؤدي الجزء الثاني
from option in list
إلى الوصول إلى كلOption
داخل القائمة الحالية. -
عبارة Where: هذه هي الجزء الحاسم من الحل:
- الشرط
where optionLists.All(l => l.Any(o => o.Value == option.Value))
يتحقق مما إذا كان الخيار الحالي موجودًا في جميع القوائم داخلoptionLists
. - تتحقق طريقة
Any
مما إذا كان هناك أيOption o
في القائمة الحاليةl
حيث تتطابقValue
معValue
للخيار الحالي.
- الشرط
-
ترتيب النتائج: تقوم عبارة
orderby option.Value
بترتيب كائناتOption
الناتجة بناءً علىValue
الخاص بها. -
عبارة Select: أخيرًا، يقوم
select option
بجمع جميع الخيارات المؤهلة في مجموعة.
اعتبارات مهمة
-
قيم مميزة: لا يتضمن الكود المقدم تحديدًا مميزًا، مما يعني أنه يمكن أن يرجع عدة كائنات
Option
بنفسValue
. إذا كنت بحاجة إلى خيارات فريدة، فقد ترغب في إضافة.Distinct()
إلى استعلامك. -
الأداء: اعتمادًا على حجم قوائمك، فإن كفاءة هذا النهج لها أهمية كبيرة. استعلامات LINQ محسن ويمكن أن تؤدي بشكل جيد مع مجموعات البيانات ذات الحجم المعقول.
الخاتمة
يمكن العثور على العناصر المشتركة عبر عدة قوائم بكفاءة في C# باستخدام LINQ، كما تم توضيحه في مثالنا. من خلال الاستفادة من قوة LINQ، يمكننا تنفيذ استعلامات معقدة مع جهد برمجي minimal. وهذا لا يسرع عملية البرمجة فحسب، بل يعزز أيضًا من قابلية قراءة الكود وصيانته.
الآن بعد أن تم تزويدك بهذه المعرفة، يمكنك تنفيذ مثل هذه الحلول بسهولة في مشاريعك، مما يجعل التعامل مع المجموعات أبسط وأكثر كفاءة.