English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

المجموعات Swift (Array)

في هذا الدرس، ستتعلم عن المصفوفات، إنشاء المصفوفات، الوصول إلى قيم المصفوفة، والعمليات الشائعة في المصفوفات.

في المقالة السابقةأنواع البيانات Swiftفي المقالة، تعلمنا كيفية إنشاء بعض أنواع البيانات المتغيرة أو الثابتة التي يمكنها حفظ قيمة واحدة.

لكن ماذا إذا أردنا تخزين عدة قيم من نفس النوع. نستخدم في Swift ما يُدعى المصفوفة الشيء

ما هو المصفوفة؟

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

يمكن لمصفوفة تخزين أي نوع بيانات مثل Int،String،Class وما إلى ذلك.

كيف يمكنني تعريف مصفوفة في Swift؟

يمكنك إنشاء مصفوفة فارغة من خلال تحديد النوع داخل الأقواس [].

تذكر أنك يجب أن تشمل النوع داخل الأقواس، وإلا سيأخذ Swift النوع كنوع بيانات عادي وستكون قادرًا على تخزين قيمة واحدة فقط.

مثال 1: تعريف مصفوفة فارغة

let emptyIntArr:[Int] = []
print(emptyIntArr)

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

[ ]

في البرنامج أعلاه، قمنا بتعريف متغير ثابت emptyIntArr يمكنه تخزين مصفوفة من الأعداد الصحيحة واستخدام القيمة 0 لتعريفها.

print(emptyIntArr)

يمكنك أيضًا تعريف مصفوفة فارغة كما يلي:

let emptyIntArr:Array<Int> = Array()
print(emptyIntArr)

print(emptyIntArr)

أو

بما أن Swift لغة التجميع، يمكنك أيضًا إنشاء مصفوفة دون تحديد النوع مباشرة، ولكن يجب أن تستخدم بعض القيم للبدء في التكوين، حتى يتمكن المبرمج من التنبؤ بنوعها:

مثال 2: إعلان مصفوفة تحتوي على بعض القيم
let someIntArr = [1،2،3،4،5،6،7،8،9]

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

print(someIntArr)

[1،2،3،4،5،6،7،8،9]في البرنامج المذكور أعلاه، قمنا بتسمية ثابت someIntArr، يمكنه تخزين مصفوفة من الأعداد الصحيحة دون الحاجة إلى تحديد النوع بشكل واضح. بالإضافة إلى ذلك، نستخدم القيم 1،2،3،4،5،6،7،8،9

تم تكوين المصفوفة.

مثال 3: إعلان مصفوفة تحتوي على قيمة مكررة محددة

يمكنك أيضًا تكرار القيمة المحددة المرة المطلوبة لتكوين مصفوفة في Swift. يتم ذلك باستخدام مصفوفة المبادئ مع repeating وcount.
let arrWithRepeatingValues = Array(repeating: "مرحبًا،العالم", count: 4)

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

print(arrWithRepeatingValues)

["مرحبًا،العالم", "مرحبًا،العالم", "مرحبًا،العالم", "مرحبًا،العالم"] في البرنامج المذكور أعلاه، قمنا بتسمية ثابت arrWithRepeatingValues، والذي يحتوي على النصوص مرحبًا،العالممصفوفة,

ويفترض تكرار نفس القيمة 4 مرات، كما هو محدد في count في المثال.الاحتياطى:

في Swift، لا يمكنك إنشاء مصفوفة بحجم محدد كما في لغات البرمجة الأخرى. يعني حجم المصفوفة المحدد أن المصفوفة لا يمكن أن تحتوي على عدد من العناصر أكثر مما تم تحديده عند التكوين.

كيف يتم تخزين القيم في المصفوفة؟

let intArr = [21, 34, 54, 12]

بإفتراض أن لديك ثابت يمكنه تخزين مصفوفة من الأنواع النصية، مثل ما يلي:

تمثل الرسومات التوضيحية كيف يتم تخزين القيم في المصفوفة كما يلي:

كل المصفوفات التي أنشأتها تبدأ من المؤشر 0. يتم تخزين العنصر الأول في المؤشر 0، والعنصر الثاني في المؤشر التالي (1)، وهكذا.

كيف يمكنك الوصول إلى عناصر المصفوفة في Swift؟ تحتباستخدام سكلاً لاستدعاء عناصر المصفوفة، أي أنك بحاجة إلى تضمين المؤشر الذي تريد الوصول إليه في بيانات بين نقطتي السهم في اسم المصفوفة.

بإفتراض أنك قمت بتسمية مصفوفة كما هو موضح أعلاه intArr. فإن العنصر الأول هو intArr[0]، والعنصر الثاني هو intArr[1]، وهكذا.

مثال 4: استدعاء عناصر المجموعة

let intArr = [21, 34, 54, 12]
print(intArr[0])
print(intArr[1])
print(intArr[2])
print(intArr[3])

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

21
34
54
12

يمكنك أيضًا استخدام حلقة for-in لاستدعاء عناصر المجموعة. لمزيد من المعلومات، يرجى الرجوع إلىدائرة Swift for-in.

كيفية تعديل/إضافة عناصر المجموعة في Swift؟

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

مثال 5: تعديل عنصر المجموعة

var intArr = [21, 34, 54, 12]
intArr[0] = 12
intArr[1] = 42
intArr[2] = 45
intArr[3] = 21
print(intArr)

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

[12, 42, 45, 21]

يمكنك أيضًا تعديل جميع عناصر المجموعة باستخدام القيم الجديدة التالية، مثلما هو موضح أدناه:

مثال 6: تعديل المجموعة ككل

var intArr = [21, 34, 54, 12]
intArr = [1, 2, 3]
print(intArr)

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

[1, 2, 3]

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

مثال 7: إضافة عنصر جديد إلى المجموعة باستخدام نحو الأسهم (غير صالح)

var intArr = [21, 34, 54, 12]
intArr[4] = 10

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

خطأ حاسم: مؤشر خارج النطاق

أعطت البرنامج الخطأ عند تخصيص العنصر الجديد للنوع intArr عند تخصيص العنصر الجديد للنوع intArr. هذا يرجع إلى عدم تخصيص intArr لذاكرة إضافية للإندكس 4، مما يجعله غير قادر على تخزين القيمة المقدمة.

لضمان إدراج العنصر الجديد في المجموعة بشكل صحيح، نستخدم طريقة append() الخاصة بالمجموعة. سيتم شرح استخدامها لاحقًا.

الوظائف والخصائص المدمجة في المجموعة

1. خاصية isEmpty

تحدد هذه الخاصية ما إذا كانت المجموعة فارغة أم لا. إذا لم تحتوي المجموعة على أي قيمة، فإنها تعود بـ true، وإلا تعود بـ false.

مثال 8: كيف يعمل isEmpty?

let intArr = [21, 34, 54, 12]
print(intArr.isEmpty)

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

false

2. خاصية first

تستخدم هذه الخاصية لاستدعاء العنصر الأول في المجموعة.

مثال 9: كيف يعمل first?

let intArr = [21, 34, 54, 12]
print(intArr.first)

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

Optional(21)

بالنسبة لنفس الأمر، يمكنك استخدام خاصية last لاستدعاء العنصر الأخير في المجموعة.

3. دالة append (إضافة)

يستخدم دالة append لضمان إدراج/إضافة عنصر في نهاية المجموعة.

مثال 10: كيف يعمل append?

var intArr = [21, 34, 54, 12]
intArr.append(32)
print(intArr)

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

[21, 34, 54, 12, 32]

يمكنك أيضًا إضافة محتويات مجموعة إلى مجموعة أخرى، مثلما هو موضح أدناه:

var firstArr = [1,2,3,4]
var secondArr = [5,6,7,8]
firstArr.append(contentsOf: secondArr)
print(firstArr)

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

[1, 2, 3, 4, 5, 6, 7, 8]

4. دالة insert (إدراج)

يستخدم هذا الدالة لإدراج/تثبيت العنصر في موقف معين في اللوحة.

مثال 11: كيف يعمل insert؟

var intArr = [21,34,54,12]
intArr.insert(22, at: 1)
print(intArr)

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

[21, 22, 34, 54, 12]

بالنفس الطريقة، يمكنك أيضًا استخدام removeproperty لإزالة العنصر في الموقع المحدد.

5. دالة remove() (إزالة)

يستخدم هذا الدالة لإزالة العنصر المحدد في الموقع المحدد من اللوحة وإرجاعه.

مثال 12: كيف يعمل remove؟

var strArr = ["ab","bc","cd","de"]
let removedVal = strArr.remove(at: 1)
print("قيمة الإزالة هي \(removedVal)")
print(strArr)

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

قيمة الإزالة هي bc
["ab", "cd", "de"]

بالنفس الطريقة، يمكنك أيضًا استخدام removeFirst لإزالة العنصر الأول من اللوحة، removeLast لإزالة العنصر الأخير، وكذلك استخدام removeAll لإفراغ اللوحة.

6. دالة reversed() (عكس)

يستخدم هذا الدالة لإرجاع عناصر اللوحة في ترتيب معكوس.

مثال 13: كيف يعمل reversed()؟

var intArr = [21,22,23,24]
let reversedArr = Array(intArr.reversed())
print(reversedArr)

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

[24, 23, 22, 21]

7. خاصية الإحصاء (إحصاء)

يستخدم هذا الخصائص لإرجاع عدد العناصر في اللوحة.

مثال 14: إحصاء

let floatArr = [10.2,21.3,32.0,41.3]
print(floatArr.count)

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

4

ملاحظات

عند استخدام نطاق التسمية في Swift للوصول إلى عناصر اللوحة يجب التأكد من أن القيمة تقع في نطاق المؤشر، وإلا سيؤدي ذلك إلى تحطم التشغيل. دعونا نرى ذلك في مثال:

let intArr = [21, 34, 54, 12]
print(intArr[-1])

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

خطأ حاسم: مؤشر خارج النطاق

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

لمنع هذا النوع من الحالات، يرجى أولاً العثور على مؤشر العنصر الذي تريد إزالته. ثم قم بإزالة العنصر في هذا المؤشر، كما هو موضح أدناه:

var intArr = [21, 34, 54, 12]
if let index = intArr.index(of: 34) {
    print("found index")
    let val = intArr.remove(at: index)
    print(val)
{}

عند تشغيل هذا البرنامج، سيتم إظهار النتيجة كالتالي:

وجدتُ مؤشرًا
34