الاستمرار في حلقة محددة
جزء من قسم المنطق وتدفق التنفيذ في رحلة GO على Coddy. الدرس 3 من 68.
تمامًا كما يمكنك استخدام التسميات مع break للخروج من loop محددة، تتيح لك Go أيضًا استخدام التسميات مع عبارة continue. تتخطى عبارة continue ذات التسمية iteration الحالية من loop المحددة وتنتقل إلى iteration التالية فيها.
يكون هذا مفيدًا بشكل خاص في nested loops عندما تريد تخطي بقية iteration الحالية من loop outer من داخل loop inner، بدلًا من مجرد متابعة loop inner.
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 0 {
continue outer
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
fmt.Println("End of outer loop iteration")
}في هذا المثال، عندما تكون i == 1 && j == 0، تتخطى عبارة continue outer بقية iteration الحالية من outer loop، بما في ذلك inner loop ورسالة "End of outer loop iteration". ثم ينتقل البرنامج مباشرةً إلى iteration التالية من outer loop حيث تصبح قيمة i هي 2.
التحدي
سهلفي هذا التحدي، ستتدرّب على استخدام عبارات continue ذات labeled للتحكم في تنفيذ nested loop. أنت تبني نظامًا لمعالجة data يحتاج إلى تخطي بعض تكرارات outer loop استنادًا إلى الشروط الموجودة في inner loop.
ستتلقى مدخلين:
- سلسلة نصية تمثل عدد الصفوف المراد معالجتها (مثلًا:
"4") - سلسلة نصية تمثل
skipconditionnumber(مثلًا:"3")
يُ提供 لك 2D data array التالي:
data := [][]int{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}
}مهمتك هي:
- تحليل عدد الصفوف من
inputالأول لتحديد عدد الصفوف التي ستتم معالجتها - تحليل
skipconditionnumberمنinputالثاني - استخدام
nestedloopsمعlabeledcontinueلمعالجةdata - التحقق من قيمة كل عمود في كل صف
- إذا عثرت على
skipconditionnumberفي أي عمود من صف، فاستخدمlabeledcontinueلتخطي بقية معالجة ذلك الصف والانتقال إلى الصف التالي - بالنسبة إلى الصفوف التي لا تحتوي على
skipconditionnumber، اطبع"Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]" - بالنسبة إلى الصفوف التي تحتوي على
skipconditionnumber، اطبع"Skipping row [row_number] due to condition"
يجب الإبلاغ عن أرقام الصفوف باستخدام الفهرسة المعتمدة على الصفر (الصف الأول هو 0). عالج فقط عدد الصفوف المحدد في input الأول، وتحقق فقط من الأعمدة الخمسة الأولى في كل صف.
جرّب بنفسك
package main
import (
"fmt"
"strconv"
)
func main() {
// اقرأ المدخلات
var rowsInput string
var skipConditionInput string
fmt.Scanln(&rowsInput)
fmt.Scanln(&skipConditionInput)
// حلل المدخلات
numRows, _ := strconv.Atoi(rowsInput)
skipCondition, _ := strconv.Atoi(skipConditionInput)
// مصفوفة البيانات ثنائية الأبعاد المقدمة
data := [][]int{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25},
}
// TODO: اكتب الكود الخاص بك أدناه
// استخدم حلقات متداخلة مع labeled continue لمعالجة البيانات
// تحقق من كل صف بحثًا عن رقم شرط التخطي
// اطبع الرسائل المناسبة بناءً على ما إذا تم العثور على الشرط
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
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 عبر الإنترنت