Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

لقطة المخزون

جزء من قسم المنطق وتدفق العمليات في رحلة Ruby على Coddy — الدرس 55 من 56.

تقرير مخزون يطبق الـ hashes، وسلاسل Enumerable، و group_by، ولمسة من التنسيق.

challenge icon

التحدي

متوسط

المصفوفة inventory معطاة. كل عنصر عبارة عن hash يحتوي على :name، و :category، و :qty، و :price.

اطبع أربعة أسطر:

  1. إجمالي قيمة المخزون لجميع العناصر (qty * price، مجموعاً)، مطبوعاً كعدد صحيح.
  2. الفئة التي تحتوي على أكبر عدد من العناصر، بالتنسيق Top category: <name> (<count>). في حال التساوي، يتم الفصل أبجدياً حسب اسم الفئة.
  3. أسماء العناصر التي نفدت من المخزون (qty == 0)، مرتبة أبجدياً، ومدمجة بـ , . إذا لم يوجد أي منها، اطبع (none).
  4. أسماء أغلى 3 عناصر من حيث سعر الوحدة، الأعلى أولاً، مدمجة بـ , . في حال التساوي، يتم الفصل حسب الاسم أبجدياً.

بالنسبة للمخزون الافتراضي، يكون المخرج هو:

232
Top category: food (3)
milk
chair, lamp, milk

ورقة مرجعية

العمل مع مصفوفات من الـ hashes باستخدام طرق Enumerable:

# المجموع مع الحساب لكل عنصر
inventory.sum { |item| item[:qty] * item[:price] }

# التجميع حسب مفتاح والعد
groups = inventory.group_by { |item| item[:category] }
groups.max_by { |cat, items| [items.count, ...] }

# التصفية، والفرز، والدمج
inventory.select { |item| item[:qty] == 0 }
         .map { |item| item[:name] }
         .sort
         .join(", ")

# الفرز حسب معايير متعددة (يتم كسر التعادل أبجدياً)
inventory.sort_by { |item| [-item[:price], item[:name]] }
         .first(3)
         .map { |item| item[:name] }
         .join(", ")

كسر التعادل أبجدياً عند استخدام max_by مع الأعداد:

# العدد الأكبر يفوز؛ عند التعادل، الأول أبجدياً (عكس السلسلة النصية لـ max_by)
groups.max_by { |cat, items| [items.count, -cat.ord] }
# أو استخدم min_by على العدد المعكوس + الترتيب الطبيعي للسلسلة النصية
groups.sort_by { |cat, items| [-items.count, cat] }.first

جرّب بنفسك

inventory = [
  { name: "apple",  category: "food",        qty: 10, price: 2 },
  { name: "bread",  category: "food",        qty: 4,  price: 3 },
  { name: "milk",   category: "food",        qty: 0,  price: 4 },
  { name: "chair",  category: "furniture",   qty: 2,  price: 35 },
  { name: "lamp",   category: "furniture",   qty: 5,  price: 20 },
  { name: "pencil", category: "stationery",  qty: 30, price: 1 }
]

# TODO: طباعة القيمة الإجمالية، الفئة الأعلى، أسماء المنتجات غير المتوفرة، وأغلى 3 منتجات من حيث السعر
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق العمليات