الدرس 7 من 8
الترتيب بمفتاحين
- 12 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
الدرجة أولًا ثم الاسم
الشرح
لوحة الصدارة ترتّب اللاعبين بالدرجة تنازليًّا، فإن تساوى لاعبان رتّبتهما بالاسم أبجديًّا، وهذا هو الترتيب بمفتاحين، فالمفتاح الثاني لا يُستعمل إلا حين يتساوى الأول.
ودالة المقارنة تُرجع رقمًا سالبًا إن كان الأول يسبق، وموجبًا إن كان الثاني يسبق، وصفرًا عند التساوي، فيكفيك سطر واحد: b.score - a.score || a.name.localeCompare(b.name, 'ar')، لأنّ || تعامل الصفر كأنه غير موجود، فلا تنتقل إلى المفتاح الثاني إلا عند التساوي.
انتبه: مقارنة الأسماء بـ < تقارن رموز الحروف لا ترتيبها في الأبجدية، فيسبق «أحمد» «إبراهيم» لأنّ رمز «أ» أصغر من رمز «إ»، مع أنّ الباء قبل الحاء، أما localeCompare فتعرف أنّ كليهما ألف فتقارن ما بعدها.
المطلوب
اكتب sortPlayers(players) لتُرجع مصفوفة جديدة مرتّبة بالدرجة تنازليًّا ثم بالاسم تصاعديًّا بـ localeCompare. وتذكّر أنّ sort تعدّل المصفوفة الأصلية، فانسخها قبل الترتيب أو استعمل toSorted.
الفحوص
5 فحوص- الدرجة مرتّبة تنازليًّا كأرقام لا كنصوص
- عند التساوي يُرتَّب اللاعبان بالاسم
- الأسماء بالترتيب الأبجدي العربي لا بترتيب الرموز
- المصفوفة الأصلية لم تتغيّر
- اللوحة معروضة بالترتيب الصحيح