الدرس 10 من 10
تقارير Enumerable
- 14 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
جمّع وعُدّ ورتّب
الشرح
أسئلة التقارير تتكرّر: كم المجموع؟ كم مرّة؟ ما حصّة كل فئة؟ ومن في الصدارة؟ وEnumerable تجيبها بطرق تتسلسل: sum تجمع ما تُرجعه الكتلة، وtally تعدّ تكرار كل قيمة في هاش، وgroup_by تقسم العناصر أقسامًا بحسب ما تُرجعه الكتلة، وsort_by ترتّب بالمفتاح الذي تختاره، والسالب يعكس الاتجاه.
وeach_with_object(Hash.new(0)) تبني النتيجة وأنت تمرّ: تعطي الكتلة كل عنصر مع مُجمِّع واحد، وتُرجع المُجمِّع في النهاية. وHash.new(0) هاش افتراضيّه صفر، فـ acc[city] += total تعمل من أول ظهور للمدينة.
والفخّ في ترتيب الوسيطين: each_with_object تمرّر |order, acc|، العنصر أوّلًا ثم المُجمِّع، عكس reduce التي تمرّر |acc, order|. اقلبهما فيصير الطلب مُجمِّعًا، وتنتهي بخطأ غامض عن nil.
المطلوب
من orders احسب: revenue مجموع الطلبات بـ sum، وcounts عدد طلبات كل مدينة بـ tally، وby_city الطلبات مجمّعة بالمدينة بـ group_by، وcity_totals إيراد كل مدينة بـ each_with_object، وranking أزواج المدينة وإيرادها من الأعلى إلى الأدنى بـ sort_by. ثم اطبع سطرًا لكل مدينة بترتيب ranking، فيه اسمها وإيرادها.
معايير التصحيح
6 معايير- revenue مجموع كل الطلبات
- counts عدد طلبات كل مدينة
- by_city يجمع الطلبات كاملة بالمدينة
- city_totals إيراد كل مدينة بـ each_with_object
- ranking من الأعلى إيرادًا إلى الأدنى
- طُبع سطر لكل مدينة بترتيب ranking