Swift: برنامج Swift التعليمي للمصفوفات

المصفوفة مثل قائمة التسوق — كل عنصر مدرج بالترتيب. يغطي هذا الدرس المجموعة الكاملة من عمليات مصفوفات Swift، من الإنشاء إلى CRUD، كلها في مكان واحد.

1. ما ستتعلمه


2. قصة حقيقية لمطور تجارة إلكترونية

(1) الألم: إدارة قائمة عربة التسوق في فوضى، بيانات غير متزامنة

Alice تبني ميزة عربة التسوق لتطبيق تجارة إلكترونية. المستخدم Charlie يضيف 5 عناصر، ثم يزيل 2 ويغير الكميات 3 مرات. عند الدفع تكتشف: إجمالي العربة لا يتطابق مع أسعار العناصر الفردية!

SWIFT
// Alice's original "manual" approach
var cartItem1 = "Laptop"
var cartItem2 = "Mouse"
var cartItemPrice1 = 999.0
var cartItemPrice2 = 25.0
// By the time items piled up, she was lost...

كانت Alice تدير 6 عناصر بـ 12 متغيرًا منفصلاً. عندما أضافت عنصرًا سابعًا، لم تكن تعرف حتى ماذا تسمي المتغير. بيانات العربة مبعثرة عبر 20+ متغيرًا — غير واحد وانس الآخر.

(2) حل المصفوفة

SWIFT
var cartItems = ["Laptop", "Mouse", "Keyboard"]
var cartPrices = [999.0, 25.0, 89.0]
cartItems.append("Monitor")
cartPrices.append(349.0)
cartItems.remove(at: 1)
cartPrices.remove(at: 1)
print("Cart: \(cartItems)")
print("Total: $\(cartPrices.reduce(0, +))")

(3) النتيجة: بيانات منظمة، 90% أخطاء أقل

المقياس متغيرات مبعثرة إدارة المصفوفة
عدد المتغيرات 18 2
إضافة عنصر إنشاء 3 متغيرات جديدة سطر واحد من append
اتساق البيانات غالبًا غير متزامن تزامن مضمون
الأخطاء أسبوعيًا 3-5 0-1

3. إنشاء المصفوفات والخصائص الأساسية

المصفوفة هي مجموعة مرتبة من العناصر — يجب أن تكون جميعها من نفس النوع.

100%
graph TB
    A[المصفوفة] --> B[الفهرس 0]
    A --> C[الفهرس 1]
    A --> D[الفهرس 2]
    A --> E[الفهرس ...]
    B --> F[عنصر]
    C --> F
    D --> F
    E --> F
طريقة الإنشاء مثال ملاحظات
حرفي [1, 2, 3] الأكثر شيوعًا
تعليق النوع Int مصفوفة فارغة
قيمة مكررة Array(repeating: 0, count: 5) كلها أصفار
من نطاق Array(1...5) من نطاق

(1) إنشاء المصفوفات

SWIFT
// Method 1: literal
let numbers = [1, 2, 3, 4, 5]
// Method 2: empty array
var emptyArray: [String] = []
// Method 3: repeated value
let zeros = Array(repeating: 0, count: 3)
print(zeros)
// Method 4: from range
let rangeArray = Array(10...15)
print(rangeArray)

(2) الخصائص الشائعة

SWIFT
let items = ["Apple", "Banana", "Orange"]
print("Count: \(items.count)")
print("Is empty: \(items.isEmpty)")
print("First: \(items.first ?? "None")")
print("Last: \(items.last ?? "None")")
print("Contains Apple: \(items.contains("Apple"))")

▶ مثال: فحص مخزون المستودع

SWIFT
// ============================================
// Managing warehouse inventory with arrays
// ============================================
var inventory: [String] = []
if inventory.isEmpty {
    print("Warehouse is empty, adding stock...")
}
inventory.append("Laptop")
inventory.append("Mouse")
inventory.append("Keyboard")
inventory.append("Monitor")
print("Inventory has \(inventory.count) items")
print("Products: \(inventory.joined(separator: ", "))")
print("First item: \(inventory[0])")
print("Last item: \(inventory[inventory.count - 1])")

المخرجات:

TEXT 📖 للعرض فقط
Warehouse is empty, adding stock...
Inventory has 4 items
Products: Laptop, Mouse, Keyboard, Monitor
First item: Laptop
Last item: Monitor

4. عمليات CRUD للمصفوفات

المصفوفات هي مجموعات قابلة للتغيير — يمكنك إضافة وإزالة العناصر في أي موضع.

العملية الطريقة مثال
إلحاق بالنهاية append(_:) array.append(4)
إدراج في موضع insert(_:at:) array.insert(0, at: 0)
إزالة م�� موضع remove(at:) array.remove(at: 2)
إزالة الأخير removeLast() array.removeLast()
إزالة الكل removeAll() array.removeAll()
تعديل عنصر تعيين بالفهرس array[1] = 100

(1) إضافة وإدراج العناصر

SWIFT
var tasks = ["Buy groceries", "Pay bills"]
// Append to end
tasks.append("Call doctor")
// Insert at specific position
tasks.insert("Check email", at: 0)
print(tasks)

(2) إزالة وتعديل العناصر

SWIFT
var scores = [88, 92, 75, 60, 95]
// Modify
scores[1] = 98
// Remove
let removed = scores.remove(at: 3)
print("Removed: \(removed)")
scores.removeLast()
scores.sort()
print(scores)

▶ مثال: مدير قائمة المهام

SWIFT
// ============================================
// Simple to-do list with arrays
// ============================================
var todoList = ["Buy milk", "Walk dog", "Write report"]
// Add
todoList.append("Read book")
todoList.insert("Morning exercise", at: 0)
// Modify
todoList[2] = "Write weekly report"
// Remove
let completed = todoList.remove(at: 1)
print("Completed: \(completed)")
// Traverse
print("\n=== Today's Todo ===")
for (i, task) in todoList.enumerated() {
    print("\(i + 1). \(task)")
}
print("\nRemaining tasks: \(todoList.count)")

المخرجات:

TEXT 📖 للعرض فقط
مكتمل: تمشية الكلب

=== مهام اليوم ===
1. تمرين صباحي
2. شراء حليب
3. كتابة تقرير أسبوعي
4. قراءة كتاب

المهام المتبقية: 4

5. اجتياز المصفوفات والعمليات الجماعية

توفر Swift طرقًا متعددة لاجتياز المصفوفات وطرق عمليات جماعية عملية.

طريقة الاجتياز الصياغة حالة الاستخدام
أساسي for item in array نهتم بالعناصر فقط
مفهرس for (i, item) in array.enumerated() نحتاج أرقام الفهارس
مصفى for item in array where condition العناصر المطابقة فقط
رتبة عليا array.map { } تحويل كل عنصر
تصفية array.filter { } الاحتفاظ بالعناصر المطابقة

(1) الاجتياز الأساسي والمصفى

SWIFT
let numbers = [3, 7, 2, 8, 5, 1, 9, 4, 6]
// Basic for-in
for num in numbers {
    print(num, terminator: " ")
}
print()
// where filter
for num in numbers where num > 5 {
    print("\(num) is greater than 5")
}

(2) الدوال ذات الرتبة العليا: map وfilter

SWIFT
let prices = [12.99, 24.50, 8.75, 35.00]
// map: add tax to each price
let withTax = prices.map { $0 * 1.08 }
print("With tax: \(withTax)")
// filter: items over 20
let expensive = prices.filter { $0 > 20 }
print("Expensive: \(expensive)")

▶ مثال: تحليل بيانات الطلبات

SWIFT
// ============================================
// Analyzing order data with array operations
// ============================================
let orderAmounts = [45.0, 120.0, 33.5, 299.0, 55.0, 180.0, 22.0]
// 1. Total sales
let total = orderAmounts.reduce(0, +)
print("Total sales: $\(total)")
// 2. High-value orders (>= 100)
let highValue = orderAmounts.filter { $0 >= 100 }
print("High-value orders: \(highValue.count)")
// 3. Add 10% service fee to all orders
let withServiceFee = orderAmounts.map { $0 * 1.1 }
print("First 3 with fee: \(Array(withServiceFee.prefix(3)))")
// 4. Sort
let sorted = orderAmounts.sorted(by: >)
print("Top 3: \(Array(sorted.prefix(3)))")

المخرجات:

TEXT 📖 للعرض فقط
Total sales: $754.5
High-value orders: 3
First 3 with fee: [49.5, 132.0, 36.85]
Top 3: [299.0, 180.0, 120.0]

6. مثال كامل: نظام إدارة عربة التسوق

SWIFT
// ============================================
// Shopping cart management system
// Combining array CRUD, traversal, and higher-order functions
// ============================================
import Foundation
var cartItems: [String] = []
var cartPrices: [Double] = []
func addItem(name: String, price: Double) {
    cartItems.append(name)
    cartPrices.append(price)
    print("Added: \(name) - $\(price)")
}
func removeItem(at index: Int) {
    guard index >= 0 && index < cartItems.count else {
        print("Invalid index")
        return
    }
    let removed = cartItems.remove(at: index)
    cartPrices.remove(at: index)
    print("Removed: \(removed)")
}
func updateQuantity(name: String, newPrice: Double) {
    if let index = cartItems.firstIndex(of: name) {
        cartPrices[index] = newPrice
        print("Updated: \(name) -> $\(newPrice)")
    }
}
func checkout() {
    guard !cartItems.isEmpty else {
        print("Cart is empty")
        return
    }
    print("\n=== Shopping Cart ===")
    var total = 0.0
    for (i, item) in cartItems.enumerated() {
        let price = cartPrices[i]
        total += price
        print("\(i + 1). \(item) - $\(String(format: "%.2f", price))")
    }
    let tax = total * 0.08
    let grandTotal = total + tax
    print("---")
    print("Subtotal: $\(String(format: "%.2f", total))")
---
## ❓ أسئلة شائعة
> **س: ماذا يحدث عند الوصول إلى مصفوفة خارج الحدود؟** **ج: يتعطل البرنامج (خطأ وقت التشغيل). تأكد دائمًا من index &lt; array.count قبل الوصول بالفهرس، أو تحقق بـ indices.contains(index).**
> **س: ما فرق الأداء بين append وinsert؟** **ج: append هي O(1) (تضيف إلى الذيل). insert هي O(n) (تحتاج لإزاحة العناصر اللاحقة). للإدراجات المتكررة في الرأس، اعتبر هياكل بيانات أخرى (مثلاً القوائم المرتبطة).**
> **س: هل Array نوع قيمة أم نوع مرجعي؟** **ج: Array هي نوع قيمة (struct). التعيين إلى متغير جديد ينشئ نسخة؛ تعديل النسخة لا يؤثر على المصفوفة الأصلية.**
> **س: كيف أدمج مصفوفتين؟** **ج: استخدم عامل +: `let combined = array1 + array2`. أو استخدم `append(contentsOf:)` لإضافة جميع عناصر مصفوفة أخرى.**
---
## 📖 ملخص
- تمثل المصفوفات بـ `[Type]`، قابلة للإنشاء بالطريقة الحرفية أو القيمة المكررة أو النطاق
- العمليات الشائعة: append، insert، remove، التعديل بالفهرس
- المصفوفات هي أنواع قيمة — التعيين ينشئ نسخة
- خيارات الاجتياز تشمل for-in الأساسية وenumerated المفهرسة وتصفية where
- reduce وmap وfilter تجعل العمليات الجماعية أكثر إيجازًا ووظيفية
- تحقق دائمًا من حدود الفهرس قبل الوصول إلى عناصر المصفوفة لتجنب الأعطال
---
## 📝 تمارين
1. **مبتدئ:** أنشئ مصفوفة من 5 أسماء مدن. استخدم for-in لطباعة "أحب [اسم المدينة]" لكل واحدة، سطر واحد لكل منها.
2. **متوسط:** اكتب نظام إدارة درجات الطلاب: أنشئ مصفوفة درجات [78, 92, 55, 88, 73]، نفذ إضافة درجات جديدة، إزالة الدرجات الراسبة (<60)، حساب المتوسط، وإيجاد أعلى درجة.
3. **متقدم:** نفذ ميزة "توصيات العربة" البسيطة. معطى مصفوفة عربة ["حاسوب محمول", "فأرة", "لوحة مفاتيح"] وجدول قواعد توصية (حاسوب محمول → حقيبة حاسوب محمول، فأرة → لوحة فأرة، لوحة مفاتيح → مسند معصم)، ولّد تلقائيًا العناصر الموصى بها وأضفها إلى العربة. لا تضف عناصر موجودة بالفعل.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%