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