تقطيع المصفوفات - الجزء الأول
جزء من قسم الأساسيات في رحلة Swift على Coddy — الدرس 73 من 86.
أحياناً لا تحتاج إلى مصفوفة كاملة، بل إلى جزء منها فقط. تجعل لغة Swift من السهل استخراج مجموعة فرعية من العناصر باستخدام تقطيع المصفوفة (array slicing) مع معاملات النطاق (range operators).
للحصول على شريحة (slice)، يمكنك استخدام نطاق داخل أقواس الفهرسة. النهج الأكثر شيوعاً يستخدم عامل النطاق نصف المفتوح (..<)، والذي يتضمن فهرس البداية ولكنه يستبعد فهرس النهاية:
let numbers = [10, 20, 30, 40, 50]
let slice = numbers[1..<4]
print(slice) // [20, 30, 40]هنا، 1..<4 يعطينا العناصر الموجودة في الفهارس 1 و 2 و 3—ولكن ليس الفهرس 4. هذا مفيد عندما تعرف بالضبط أين تريد التوقف.
إذا كنت تريد تضمين فهرس النهاية، فاستخدم عامل النطاق المغلق (...):
let letters = ["a", "b", "c", "d", "e"]
let slice = letters[1...3]
print(slice) // ["b", "c", "d"]تفصيل مهم واحد: نتيجة التقسيم (slicing) هي ArraySlice، وليست Array عادية. إذا كنت بحاجة إلى مصفوفة حقيقية، فقم بتغليفها بـ Array():
let original = [1, 2, 3, 4, 5]
let sliced = Array(original[0..<3])
print(sliced) // [1, 2, 3]التحدي
سهلاكتب دالة getMiddleElements تأخذ numbers و start و end وتعيد جزءاً من المصفوفة من فهرس البداية وصولاً إلى (ولكن دون تضمين) فهرس النهاية.
استخدم عامل النطاق نصف المفتوح (..<) لاستخراج الجزء المحدد من المصفوفة وإعادته كمصفوفة عادية.
المعاملات:
numbers([Int]): المصفوفة المراد تقسيمهاstart(Int): فهرس البداية (شامل)end(Int): فهرس النهاية (غير شامل)
القيمة المرجعة: مصفوفة تحتوي على العناصر من فهرس البداية وصولاً إلى (ولكن دون تضمين) فهرس النهاية ([Int])
مثال: إذا كانت numbers هي [10, 20, 30, 40, 50, 60]، و start هو 1، و end هو 4، يجب أن تعيد الدالة [20, 30, 40].
ورقة مرجعية
تسمح لك لغة Swift باستخراج جزء من مصفوفة باستخدام تقطيع المصفوفة (array slicing) مع معاملات النطاق.
استخدم معامل النطاق نصف المفتوح (..<) للتقطيع من فهرس البداية وصولاً إلى (ولكن دون تضمين) فهرس النهاية:
let numbers = [10, 20, 30, 40, 50]
let slice = numbers[1..<4]
print(slice) // [20, 30, 40]استخدم معامل النطاق المغلق (...) لتضمين فهرس النهاية:
let letters = ["a", "b", "c", "d", "e"]
let slice = letters[1...3]
print(slice) // ["b", "c", "d"]تُرجع عملية تقطيع المصفوفة نوعاً يسمى ArraySlice. ولتحويله إلى مصفوفة Array عادية، قم بتغليفه بـ Array():
let original = [1, 2, 3, 4, 5]
let sliced = Array(original[0..<3])
print(sliced) // [1, 2, 3]جرّب بنفسك
func getMiddleElements(numbers: [Int], start: Int, end: Int) -> [Int] {
// اكتب الكود هنا
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمةالإسناد المركبمراجعة - عمليات رياضية بسيطةمعاملات المقارنة7أساسيات الإدخال والإخراج
دالة الطباعةتضمين النصوصإدخال ReadLineتحويل الأنواعمراجعة - حتى 120مراجعة - True أو False10الدوال
تعريف دالةالمعاملات والوسائطقيم الإرجاعتسميات الوسائطمراجعة - دالة Sigmaمراجعة - دالة Validationالقيم الافتراضية2المتغيرات
Let مقابل Varتوصيف الأنواع (Type Annotations)الأرقامStringBooleanقواعد التسميةمراجعة - تهيئة المتغيرات5المعاملات - الجزء الثاني
المعاملات المنطقية - الجزء الأولالمعاملات المنطقية - الجزء الثانيمراجعة - المنطق البسيطالمعاملات المنطقية - الجزء الثالثالمعامل الثلاثي (Ternary Operator)8حاسبة تقسيم الفاتورة
رسالة الترحيبالحصول على المدخلات14المصفوفات المتقدمة
تقطيع المصفوفات - الجزء الأولتقطيع المصفوفات - الجزء الثانيمعاملات المتسلسلاتدالة Contains3القيم الاختيارية (Optionals)
ما هي القيم الاختياريةفك القيم باستخدام If Letاستخدام Guard Letمعامل دمج Nilمراجعة - فك القيم بأمان9حلقات التكرار
حلقة For-Inحلقة Whileحلقة Repeat-WhileBreakContinueمراجعة - المضروب (Factorial)النطاقات في حلقات التكرارالحلقات المتداخلةمراجعة - الإدخال الديناميكي (Dynamic Input)