هل جائت Set لتستبدل Array ؟
كونك مبرمج فمهم جدا تعرف ان اختيار الهيكلة الصحيحة تساهم بشكل كبير للوصول للحل الأمثل Choosing the correct structure contributes to deliver optimal solution
المجموعة Set
هي احد الإضافات في ES6 والذي تملك خصائص ودوال رهيبة وقد يظهر للبعض انها جائت عشان تحل محل المصفوفات بينما كلاهما يختلفو باختلافات جوهرية تجعل عملية الاستبدال فكرة مش واردة
المصفوفة Array
هي هيكلية لتجميع العناصر بشكل تتابعي والتي قد تكون مكرره Index collection تعتمد بترتيبها على الفهارس
المجموعة Set
هي مجموعة من العناصر الفريدة والغير مكررة ويجب ان تكون هذه العناصر iterable Key collection تستخدم المفاتيح للوصول
ممكن نحول من نوع للثاني بكل سهولة مع ملاحظة ان التحويل من المصفوفة للمجموعة يلغي أي عناصر مكررة واذا تم اعادتها الى المصفوفة ستكون المصفوفة ذو عناصر فريدة مثل المثال التالي
القدرات والاختلافات الجوهرية بخصوص قدرات كل نوع واختلافه الجوهري عن الاخر بنذكرها عن طريق تسليط الضوء على اهم العمليات الذي لازم تحدث
1-الوصول العشوائي للعناصر
المجموعات لا تدعم الوصول المباشر لاي عنصر كونها لاتعتمد على index
المصفوفات تدعم الوصول العشوائي للعناصر وكون العناصر تخزن في الذاكرة بشكل متتابع فهذا يعني انه عند استخدام for loop تكون المصفوفات سريعة في الوصول لعناصرها
تدعم المجموعات عملية فحص وجود العنصر ضمنها عن طريق دالة Set.has وتعتبر سريعة مقارنة بArray.indexOf الذي تقوم بإعادة 0 او -1مما يعني اننا نحتاج ان ننفذ شرط اخر لفحص ما اذا كان العنصر موجود في المصفوفه او لا في ES5 تم إضافة دالة Array.includes والتي تكافئ Set.has بالاداء
2-إضافة عنصر جديد
الإضافة في نهاية المصفوفه تتم بواسطة الدالة Array.push() وتستهلك O(1) من الوقت لانجازها بينما الدالة Array.unshift() والتي تقوم بإضافة عنصر جديد الى بداية المصفوفه تستغرق وقت O(n) وهو الوقت الخاص بعمل ازاحة للعناصر
المقابل لإضافة عنصر جديد للمجموعات نستخدم دالة وحيدة وهيSet.add() والتي تقوم بفحص اذا كان العنصر مكرر في المجموعه او لا ومن المفترض ان يستهلكO(n) لتنفيذ العملية ولكن بسبب استخدام hashMap فان الوقت المستغرقO(1)
وبهذه الحالة تتساوى Set و Array من ناحية الكفاءة والقدرات
3-حذف عنصر جديد
تمتلك المصفوفات دوال عدة لحذف عنصر دالة Array.pop() تستغرق O(1) وهو الوقت المستخدم للوصول لاخر عنصر وحذفة ودالة Array.shift() تستغرق O(n) وهو الوقت المستخدم لعمل إزاحة للعناصر بعد حذف اول عنصر في المصفوفة
بالمقابل تستخدم المجموعات الدالةSet.delete() لحذف عنصر محدد و Set.clear()لحذف كافة عناصرهاوهذا يستغرق O(1) ونلاحظ هنا تميز المجموعات عن المصفوفات في الوصول لاي عنصر دون الحاجة لمعرفة الـ index الخاص به ويمكن حل هذه المشكلة بواسطة دوال البحث واستخدام موقع العنصر لاجراء الحذف
نستنتج ان المجموعةSet لم تأتي لتأخذ مكان المصفوفة Arrayولكن جائت كمكملة لها ويمكن استخدام كل منهافي الحالات التالية:
1.نستخدام Set عندما نحتاج ان نحتفظ ببيانات دون تكرار مثل وقت وصول الموظف للعمل
2.نستخدم Array عندما نريد ترتيب العناصر بشكل متتالي ونستطيع الوصول لها بواسطة index
كتبه @MusheeraAh