في بداية الأمر، يُشير الكود الأصلي إلى إنشاء مصفوفة تجمعية في C# باستخدام الفئة Dictionary
. يتم إنشاء قاموس يحتوي على مفاتيح من نوع int
وقيم كل مفتاح هي قاموس آخر من نوع Dictionary
. ثم يتم الوصول إلى القيمة المتعلقة بالمفتاح 10 وطباعة القيم الموجودة فيه.
لجعل الكود أكثر أناقة وصيانة، قمت بإنشاء فئتين، DataContainer
وDataValue
. الفئة DataContainer
تحتوي على متغيرين، index
و DataValue
، حيث index
يُعبِر عن المفتاح، وDataValue
يُعبِر عن القيمة المرتبطة بالمفتاح. الفئة DataValue
تحتوي على اسم name
وقائمة IntegerValues
التي تحمل القيم الصحيحة.
ثم قمت بمحاولة ملء البيانات باستخدام الكود الذي أعطيته، ولكن واجهت مشكلة في النحو. السبب في ذلك هو أنك تحاول تعيين قائمة DataValue
لكائن من النوع List
، ولكن تحتاج إلى استخدام النوع DataValue
. يمكنك تصحيح ذلك عن طريق تعيين DataValue
مباشرةً كما هو موضح في الكود التالي:
csharppublic List harakatSininilMabsutoh = new List()
{
new DataContainer
{
index = 10,
DataValue = new DataValue
{
name = "first",
IntegerValues = new List<int> {9, 55, 18, 11}
}
},
new DataContainer
{
index = 10,
DataValue = new DataValue
{
name = "second",
IntegerValues = new List<int> {5, 54, 18, 11}
}
}
};
الآن، يحتوي كل عنصر في harakatSininilMabsutoh
على index
و DataValue
، ويمكنك الوصول إلى البيانات بشكل مُنظم. لطرح قيم IntegerValues التي لها index يساوي 10، يمكنك استخدام الكود التالي:
csharp// عند استخدام LINQ
var valuesWithIndex10 = harakatSininilMabsutoh
.Where(item => item.index == 10)
.Select(item => item.DataValue.IntegerValues)
.FirstOrDefault();
// طباعة القيم
foreach (var value in valuesWithIndex10)
{
Console.WriteLine(value);
}
يتم استخدام LINQ هنا لاستخراج القيم التي لها index يساوي 10، ثم يتم طباعة هذه القيم. يمكنك تضمين هذا الجزء من الكود في برنامجك لتحقيق النتائج المرجوة.
المزيد من المعلومات
بالطبع، دعونا نقوم بتوسيع المحتوى لنقدم مزيدًا من المعلومات حول كيفية تحسين تنظيم وإدارة بياناتك باستخدام هذا النهج الأنيق لإنشاء فئات وتحقيق الأهداف التي حددتها.
في هذا السياق، يُفضل دمج المنطق المتعلق بإنشاء وإدارة البيانات داخل الفئات نفسها لتحقيق التنظيم وسهولة الصيانة. يمكن أيضًا تحسين أداء الكود بتحسين هيكل البيانات واستخدام تقنيات البرمجة الشيءية.
قد تبدو الفئات التالية أفضل:
csharpclass DataContainer
{
public DataContainer(int index)
{
Index = index;
DataValues = new List();
}
public int Index { get; set; }
public List DataValues { get; set; }
}
class DataValue
{
public DataValue(string name, List<int> integerValues)
{
Name = name;
IntegerValues = integerValues;
}
public string Name { get; set; }
public List<int> IntegerValues { get; set; }
}
ثم يمكنك ملء البيانات بهذه الطريقة:
csharpList dataContainers = new List
{
new DataContainer(10)
{
DataValues =
{
new DataValue("first", new List<int> {9, 55, 18, 11}),
new DataValue("second", new List<int> {5, 54, 18, 11})
}
},
new DataContainer(40)
{
DataValues =
{
new DataValue("first", new List<int> {4, 24, 5, 0}),
new DataValue("second", new List<int> {42, 58, 23, 8})
}
}
};
هذا التنظيم يجعل من السهل فهم هيكل البيانات ويسهم في جعل الكود أكثر قابلية للصيانة. يمكنك الآن الوصول إلى القيم بشكل مباشر من خلال التنقل في القوائم دون الحاجة إلى العديد من الحلقات المتداخلة.
مثلا، للوصول إلى القيم التي لها index يساوي 10، يمكنك استخدام الكود التالي:
csharpvar valuesWithIndex10 = dataContainers
.FirstOrDefault(container => container.Index == 10)?
.DataValues
.SelectMany(dataValue => dataValue.IntegerValues);
// طباعة القيم
foreach (var value in valuesWithIndex10)
{
Console.WriteLine(value);
}
هذا يقوم بالبحث عن DataContainer
الذي يحمل index يساوي 10، ثم يستخرج القيم المتعلقة بذلك.