الدرس 10 من 10

تقارير Enumerable

هدف الدرس

جمّع وعُدّ ورتّب

01

الشرح

أسئلة التقارير تتكرّر: كم المجموع؟ كم مرّة؟ ما حصّة كل فئة؟ ومن في الصدارة؟ و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.

02

المطلوب

من orders احسب: revenue مجموع الطلبات بـ sum، وcounts عدد طلبات كل مدينة بـ tally، وby_city الطلبات مجمّعة بالمدينة بـ group_by، وcity_totals إيراد كل مدينة بـ each_with_object، وranking أزواج المدينة وإيرادها من الأعلى إلى الأدنى بـ sort_by. ثم اطبع سطرًا لكل مدينة بترتيب ranking، فيه اسمها وإيرادها.

معايير التصحيح

6 معايير
  1. revenue مجموع كل الطلبات
  2. counts عدد طلبات كل مدينة
  3. by_city يجمع الطلبات كاملة بالمدينة
  4. city_totals إيراد كل مدينة بـ each_with_object
  5. ranking من الأعلى إيرادًا إلى الأدنى
  6. طُبع سطر لكل مدينة بترتيب ranking
main.rb
المخرجاتRuby 3.4 · ruby.wasm

جارٍ تحميل Ruby… نحو 8MB مرّة واحدة، ثم يحفظها المتصفح.

–/6

يبدأ الفحص حين تجهز البيئة.

6 معايير في بطاقة «المطلوب».