إزالة التكرارات من المصفوفة في Swift: دليل للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيف تتخلص من التكرارات في مصفوفة Swift: دليل واضح للمبتدئين

\n\n

هل سبق لك أن واجهت موقفًا تحولت فيه المصفوفة في Swift إلى "مزبلة" من البيانات المكررة؟ إذا كان الأمر كذلك، فأنت لست وحدك. سؤال "Removing duplicate elements from an array in Swift" على Stack Overflow حصد آلاف المشاهدات - وهذا ليس مفاجئًا. العمل مع التكرارات هي إحدى المهام الأكثر شيوعًا التي يواجهها كل مطور، سواء كان مبتدئًا أو محترفًا. اليوم سنفهم مرة وإلى الأبد كيفية إزالة العناصر المكررة من المصفوفة في Swift بأناقة وفعالية، باستخدام طرق مجربة وأمثلة كود حقيقية.

\n\n

لماذا هذا مهم: سيناريوهات عملية

\n\n

تخيل أنك تكتب تطبيقًا لإدارة جهات الاتصال. يقوم المستخدم باستيراد قائمة من 1000 سجل، ولكن يوجد بها 200 تكرار. أو أنك تعمل مع بيانات من API، حيث يأتي نفس المنتج عدة مرات. التكرارات لا تسبب فوضى في الواجهة فحسب، بل قد تؤدي أيضًا إلى أخطاء منطقية، وزيادة وقت المعالجة، وارتباك في البيانات. القدرة على تنظيف المصفوفات هي أساس سيوفر لك ساعات من التصحيح.

\n\n

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

\n\n

الطريقة 1: استخدام Set - أسرع وأسهل طريقة

\n\n

الإجابة الأكثر شيوعًا على Stack Overflow لإزالة التكرارات من المصفوفة في Swift هي استخدام هيكل Set. Set هو مجموعة غير مرتبة من العناصر الفريدة. بتحويل المصفوفة إلى Set، نتخلص تلقائيًا من جميع التكرارات، ثم نحولها مرة أخرى إلى مصفوفة.

\n\n

مثال كود:

\n\n
let numbers = [1, 2, 3, 2, 4, 5, 1, 3]\nlet uniqueNumbers = Array(Set(numbers))\nprint(uniqueNumbers) // الإخراج: [5, 2, 3, 1, 4] (قد يختلف الترتيب)\n
\n\n

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

\n\n

متى تستخدم Set؟

\n
    \n
  • عندما لا يكون ترتيب العناصر مهمًا.
  • \n
  • عندما تحتاج إلى أسرع حل ممكن.
  • \n
  • عندما تعمل مع أنواع بدائية (Int, String, Double وغيرها) التي تتوافق مع بروتوكول Hashable.
  • \n
\n\n

الطريقة 2: الحفاظ على الترتيب باستخدام NSOrderedSet

\n\n

إذا كنت تعمل في مشروع يُسمح فيه باستخدام Objective-C runtime (مثل المشاريع القديمة أو قواعد الكود المختلطة)، يمكنك استخدام NSOrderedSet. هذه الفئة من Foundation تحافظ على ترتيب الإضافة وتزيل التكرارات تلقائيًا.

\n\n

مثال كود:

\n\n
import Foundation\n\nlet names = ["Анна", "Борис", "Анна", "Виктор", "Борис"]\nlet uniqueNames = NSOrderedSet(array: names).array as! [String]\nprint(uniqueNames) // الإخراج: ["Анна", "Борис", "Виктор"]\n
\n\n

الإيجابيات: الترتيب محفوظ، الكود قصير. السلبيات: يتم استخدام جسر مع Objective-C، مما قد يكون مبالغًا فيه لمشروع Swift خالص. بالإضافة إلى ذلك، NSOrderedSet يعمل بشكل أبطأ من Set الأصلي بسبب التكاليف الإضافية.

\n\n

الطريقة 3: التصفية المخصصة مع الحفاظ على الترتيب (Swift خالص)

\n\n

هذه هي الطريقة الأكثر مرونة والموصى بها لـ Swift الحديث. نقوم بإنشاء مصفوفة فارغة للنتيجة و Set لتتبع العناصر التي تمت مواجهتها بالفعل. عند المرور عبر المصفوفة الأصلية، نضيف العنصر إلى النتيجة فقط إذا لم يكن موجودًا بالفعل في Set.

\n\n

مثال كود:

\n\n
func removeDuplicates<T: Hashable>(from array: [T]) -> [T] {\n    var seen = Set<T>()\n    var result = [T]()\n    \n    for element in array {\n                

المدونات

توصيات الكتب