+ دليل المبرمجين - ما الفرق بينArray و Set ؟

ما الفرق بين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