ما الفرق بينArray و Set ؟

ثريدات برمجية 399 ما الفرق بينArray  و Set ؟

هل جائت 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