الخروج من الحلقات المتداخلة
جزء من قسم المنطق وتدفق التنفيذ في رحلة GO على Coddy. الدرس 2 من 68.
عند العمل مع الحلقات المتداخلة، لا تُنهي عبارة break العادية إلا الحلقة الداخلية. ومع ذلك، توفّر Go تسميات تتيح لك الخروج مباشرةً من الحلقات الخارجية، مما يمنحك تحكمًا دقيقًا في بُنى الحلقات المعقدة.
التسمية هي مُعرّف يتبعه نقطتان رأسيتان، وتضعه قبل الحلقة. يمكنك بعد ذلك استخدام break متبوعًا باسم التسمية للخروج من تلك الحلقة تحديدًا، حتى من داخل الحلقات المتداخلة.
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 1 {
break outer
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
}في هذا المثال، عندما يتحقق الشرط i == 1 && j == 1، تنهي break outer الحلقتين الداخلية والخارجية فورًا. وهذا مفيد بشكل خاص عند البحث في هياكل بيانات ثنائية الأبعاد، عندما تريد إيقاف البحث تمامًا بمجرد العثور على ما تبحث عنه.
التحدي
سهلفي هذا التحدي، ستتدرّب على استخدام عبارات break ذات التسمية للخروج من الحلقات المتداخلة عند البحث في شبكة ثنائية الأبعاد. عليك العثور على رقم مستهدف محدد في الشبكة والتوقف عن البحث فور العثور عليه.
ستتلقى مُدخلين:
- سلسلة تمثل أبعاد الشبكة بالتنسيق
"rows,cols"(مثلًا،"3,4") - سلسلة تمثل الرقم المستهدف الذي تبحث عنه (مثلًا،
"7")
تتوفر لديك شبكة الأرقام الثنائية الأبعاد التالية:
grid := [][]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
}مهمتك هي:
- استخدام القيم التي قُرئت لك مسبقًا في الشيفرة أعلاه:
rowsوcols(مقدار الجزء الذي ستبحث فيه من الشبكة)، وtarget، وgrid - استخدام حلقات متداخلة مع عبارة
breakذات تسمية للبحث في الشبكة - عندما تعثر على الرقم المستهدف، اطبع
"Found [target] at position ([row], [col])"واخرج فورًا من الحلقتين باستخدام عبارةbreakذات التسمية - إذا أكملت البحث دون العثور على الرقم المستهدف، فاطبع
"Target [target] not found"
يجب الإبلاغ عن الموضع باستخدام فهرسة تبدأ من 0 (الصف الأول هو 0، والعمود الأول هو 0).
جرّب بنفسك
// TODO: اكتب الكود الخاص بك أدناه
// استخدم حلقات متداخلة مع تعليمة break ذات تسمية للبحث عن الهدف
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1تدفق التحكم المتقدم
جملة Switch مع `fallthrough`الخروج من الحلقات المتداخلةالاستمرار في حلقة محددةجملة `goto`ملخص - التحكم المتقدم في الحلقات2الـ Structs والميثودز (Methods)
تعريف الـ Methods على الـ Structsالـ Value Receiversالـ Pointer Receiversاختيار الـ Receiversالـ Methods مقابل الـ Functionsملخص - سلوك الـ Struct5تعمق في الـ Maps
Maps من نوع Structsالـ Pointers كقيم في الـ Mapsالتحقق من الـ Nil Mapsمقارنة الـ Mapsمراجعة - عداد تكرار الكلمات3الواجهات (الأساسيات)
ما هي الواجهة؟تعريف الواجهةتطبيق الواجهةاستخدام أنواع الواجهاتالواجهة الفارغةتأكيدات النوع (Type Assertions)تبديل النوع (Type Switch)ملخص - الأشكال والسلوكياتتدرّب بنفسك: مترجم Go عبر الإنترنت