استبدال تكرار المصفوفات for... if
في C#
إذا كنت مطورًا قد عملت مع المصفوفات والحلقات في C#، فقد تواجه موقفًا تحتاج فيه إلى تكرار مصفوفة وتطبيق بعض التحولات بناءً على شرط معين. بينما قد تبدو التكرارات البسيطة باستخدام foreach
بديهية، فإنها غالبًا ما تؤدي إلى حلول أقل أناقة. في هذا المنشور، سنستكشف العوائق الشائعة لاستخدام foreach
مع الشروط ونقدم بدائل قوية يمكن أن تبسط شيفرتك، تمامًا كما تفعل قائمة الشمول في بايثون.
المشكلة مع foreach
فكر في الحلقة foreach
التالية، التي تقوم بزيادة القيم في مصفوفة بناءً على شرط:
foreach (int x in intArray)
if (x > 3) // شرط عام على x
x++;
// قم بعمليات معالجة أخرى
تسليط الضوء على المشكلة
- حدود التعديل: المشكلة الرئيسية هنا هي أن عملية الزيادة على
x
لا تعدل محتويات المصفوفة الأصلية. ونتيجة لذلك، لا تحقق هذه الطريقة التأثير المطلوب لتحديث القيم فيintArray
كما تتوقع.
استخدام حلقة for
التقليدية
لتعديل محتويات المصفوفة بشكل فعال، يجب عليك استخدام حلقة for
التقليدية. إليك كيفية تنفيذها:
for(int i = 0; i < intArray.Length; ++i)
{
if(intArray[i] > 3)
++intArray[i];
}
مزايا حلقة for
- تعديل مباشر: تتيح لك هذه الطريقة تعديل عناصر المصفوفة مباشرة، مما يضمن أن أي تغييرات تظهر فوريًا داخل المصفوفة نفسها.
- مرونة: يمكنك بسهولة التلاعب بالفهارس وتنفيذ منطق أكثر تعقيدًا حسب الحاجة.
الاستفادة من LINQ للتحويل
يمكن أن توفر LINQ (استعلام متكامل مع اللغة) أيضًا حلولًا لتكرار المصفوفات، على الرغم من أنها موجهة أكثر نحو إنشاء تسلسلات جديدة بناءً على الموجودة، بدلاً من تعديلها في مكانها. إليك couple من الأمثلة:
استخدام LINQ لتحويل البيانات
لإنشاء مصفوفة جديدة مُحوَّلة، يمكنك تطبيق LINQ على النحو التالي:
var newArray1 = from i in intArray select ((i > 3) ? (i + 1) : (i));
var newArray2 = intArray.Select(i => (i > 3) ? (i + 1) : (i));
مثال باستخدام جملة where
إذا كنت تريد تصفية العناصر التي تقل عن عتبة معينة وإنشاء مصفوفة جديدة، يمكنك فعل ذلك:
var intArray = new int[] { 10, 1, 20, 2 };
var newArray = from i in intArray where i > 3 select i + 1;
// newArray == { 11, 21 }
تذكر
- إنشاء تسلسلات جديدة: تذكر أن LINQ ليست موجهة لاستخدامها في تعديل المجمعات الموجودة، بل لإنشاء تسلسلات جديدة بناءً على التحولات أو الفلاتر.
استخدام أسلوب ForEach
بالنسبة للمصفوفات، يقدم C# أيضًا أسلوب ForEach
الذي يتيح لك استخدام دالة لامدا لإجراءات أبسط:
intArray.ForEach(i => DoSomething(i));
اعتبارات
- متى تستخدم
ForEach
: تعمل هذه الطريقة بشكل جيد لتنفيذ كتلة من الشفرة لكل عنصر، لكن قد لا تكون مرنة مثل حلقةforeach
أوfor
للعمليات الأكثر تعقيدًا.
الخاتمة
باختصار، بينما قد تبدو حلقة foreach
جذابة لتكرار المصفوفات في C#، فإن استخدام حلقة for
التقليدية هو أكثر عملية عندما تحتاج إلى تعديل العناصر مباشرة. استكشف LINQ لإنشاء تسلسلات جديدة بناءً على الشروط، واعتبر استخدام أسلوب ForEach
لعمليات مبسطة على المجمعات. ستساعدك هذه البدائل على كتابة شيفرة C# أنظف وأكثر قابلية للقراءة وفعالية.
من خلال فهم قدرات وقيود كل بنية، ستكون أكثر تأهيلاً لاختيار الأداة المناسبة لمهام البرمجة الخاصة بك في المستقبل.