Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

دوال النطاقات

جزء من قسم المنطق والتدفق في رحلة Swift على Coddy — الدرس 9 من 56.

تُعد النطاقات Collections حقيقية، لذا فهي تأتي مع نفس مجموعة الأدوات التي تستخدمها في المصفوفات.

تعمل كل من contains و count و first و last بشكل مباشر:

let r = 1...10
print(r.contains(5))            // صحيح
print(r.count)                  // 10
print(r.first!, r.last!)        // 1 10

معظم دوال المصفوفات التي استخدمتها تعمل أيضًا. تُرجع filter مصفوفة لأن نتيجة تصفية نطاق ليست نطاقًا بحد ذاتها:

let evens = (1...10).filter { $0 % 2 == 0 }
print(evens)                    // [2, 4, 6, 8, 10]

الأمر نفسه مع reduce: النطاقات تدعمها، وستعتمد عليها لعمليات الجمع والضرب السريعة.

challenge icon

التحدي

سهل

اقرأ عددين صحيحين (في سطرين): n و target. تعامل مع النطاق المغلق 1...n كمجموعة بياناتك.

اطبع ثلاثة أسطر:

  1. true عندما يكون target ضمن النطاق، وإلا false
  2. حاصل ضرب كل قيمة في النطاق (n!: المضروب). استخدم reduce.
  3. القيم الموجودة في النطاق التي تعد مضاعفات العدد 3، مدمجة بـ , (أو سطر فارغ في حال عدم وجود أي منها). استخدم filter.

بالنسبة للمدخلات 5 / 3، يكون المخرج:

true
120
3

ورقة مرجعية

تتوافق النطاقات (Ranges) مع Collection وتدعم دوال المجموعات الشائعة:

let r = 1...10
r.contains(5)   // true
r.count         // 10
r.first!        // 1
r.last!         // 10

تُرجع filter على النطاق مصفوفة:

let evens = (1...10).filter { $0 % 2 == 0 }
// [2, 4, 6, 8, 10]

تعمل reduce مباشرة على النطاقات:

let product = (1...5).reduce(1) { $0 * $1 }  // 120
let sum = (1...5).reduce(0, +)               // 15

جرّب بنفسك

let n = Int(readLine()!)!
let target = Int(readLine()!)!
let r = 1...n

// TODO: contains(target)، المنتج عبر reduce، مضاعفات 3 عبر filter
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق والتدفق