عند مواجهتنا لتحدي استخراج قائمة من السلاسل المفصولة بواسطة فواصل من قائمة من الكائنات في C#, يمكننا الاعتماد على مكتبة LINQ لتحقيق هذا الهدف بطريقة أنيقة وفعّالة.
أولاً وقبل الشروع في كتابة الشيفرة، يتعين علينا فهم البيانات الأولية. لدينا قائمة lst
التي تحتوي على كائنات، وكل كائن يحتوي على خاصية codes
التي تحتوي على سلسلة من الرموز الألفبائية مفصولة بفواصل.
-
تفادي استثناء NullPointerException في Java26/02/2024
باستخدام LINQ، يمكننا تحويل هذه القائمة إلى قائمة نهائية تحتوي على جميع الرموز المفصولة. فيما يلي الشيفرة التي تنفذ هذا الغرض:
csharpusing System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
// تعريف القائمة الأصلية
List lst = new List
{
new MyObject { codes = "AA,BB,DD" },
new MyObject { codes = "AA,DD,EE" },
new MyObject { codes = "GG,JJ" }
};
// استخدام LINQ لاستخراج الرموز وتجميعها في قائمة نهائية
List<string> result = lst.SelectMany(obj => obj.codes.Split(',')).Distinct().ToList();
// طباعة النتيجة
Console.WriteLine(string.Join(",", result));
}
}
// تعريف الكائن
class MyObject
{
public string codes { get; set; }
}
تقوم الشيفرة بفحص كل كائن في القائمة الأصلية، ثم تقوم باستخدام Split(',')
لتقسيم سلسلة الرموز بناءً على الفواصل. بعد ذلك، يتم دمج جميع الرموز باستخدام SelectMany
، وأخيراً يتم استخدام Distinct
للتأكد من عدم وجود رموز مكررة. النتيجة النهائية تكون قائمة من السلاسل تحتوي على جميع الرموز المستخرجة.
المزيد من المعلومات
بالطبع، دعونا نوسع قليلاً على الكود ونقدم بعض التوضيحات إضافية.
أولاً، يجب أن نفهم أن SelectMany
هو أحد أساليب LINQ والذي يُستخدم لفحص عناصر متوسطة في قائمة متداخلة (nested list)، ويقوم بإرجاع تلك العناصر المتوسطة كقائمة واحدة. في حالتنا، نستخدمه لفحص كل كائن في lst
واستخراج الرموز من خاصية codes
المتضمنة سلاسل مفصولة بفواصل.
تُستخدم Split(',')
لتقسيم السلسلة في خاصية codes
بناءً على الفواصل. بمعنى آخر، يتم تحويل سلسلة مثل “AA,BB,DD” إلى مصفوفة ["AA", "BB", "DD"]
.
باستخدام SelectMany
، يتم استخراج هذه المصفوفات الفردية وتجميعها في قائمة واحدة. ولكن هنا نستخدم Distinct()
للتأكد من عدم وجود رموز مكررة في النهاية، حيث يقوم Distinct
بإزالة أي عناصر مكررة.
أخيرًا، يتم تحويل القائمة النهائية إلى List
باستخدام ToList()
ويتم طباعة النتيجة باستخدام string.Join(",", result)
.
الهدف هنا هو الحصول على قائمة نهائية تحتوي على جميع الرموز المستخرجة دون تكرار، مما يوفر للمستخدم القدرة على الوصول إلى قائمة فريدة تحتوي على جميع الرموز المتاحة في الكائنات الأصلية.