Menu
CoddyTech
flag Ar iconالعربيةdown icon

sort_by، min_by، max_by

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

أنت تعرف بالفعل sort و min و max. تمنحك إصدارات _by التحكم في ماذا ستقارن، وهي مثالية لفرز البيانات المنظمة.

تأخذ sort_by كتلة (block)؛ حيث تعيد هذه الكتلة القيمة التي سيتم المقارنة بناءً عليها لكل عنصر:

words = ["banana", "hi", "hello"]
by_length = words.sort_by { |w| w.length }
puts by_length.inspect   # ["hi", "hello", "banana"]

للترتيب التنازلي، قم بنفي مفتاح المقارنة، -w.length للأرقام، أو استدعِ reverse على النتيجة.

يعيد كل من min_by و max_by العنصر الوحيد الذي يمتلك أصغر / أكبر قيمة ناتجة عن الكتلة البرمجية (block):

people = [
  { name: "Ada",   age: 36 },
  { name: "Bob",   age: 22 },
  { name: "Cara",  age: 41 }
]

youngest = people.min_by { |p| p[:age] }
oldest   = people.max_by { |p| p[:age] }
puts youngest[:name]   # Bob
puts oldest[:name]     # Cara

تعمل الصيغة المختصرة أيضًا: words.sort_by(&:length).

challenge icon

التحدي

متوسط

مصفوفة products معطاة، كل عنصر فيها عبارة عن hash يحتوي على :name و :price و :quantity. قيمة المخزون لكل منتج هي price * quantity.

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

  1. الأسماء مرتبة حسب قيمة المخزون تنازلياً، مدمجة بـ , (استخدم sort_by على القيمة المشتقة)
  2. اسم المنتج الذي يحتوي على أعلى كمية من بين العناصر التي يقل سعرها عن 5 (استخدم max_by على قائمة مصفاة)
  3. اسم أرخص منتج كميته لا تقل عن 10 (استخدم min_by على قائمة مصفاة)

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

cheese, milk, bread, apple
bread
bread

جرّب بنفسك

products = [
  { name: "milk",   price: 3, quantity:  8 },
  { name: "apple",  price: 1, quantity:  4 },
  { name: "cheese", price: 5, quantity:  6 },
  { name: "bread",  price: 2, quantity: 12 }
]

# TODO: الترتيب حسب قيمة المخزون تنازلياً؛ الحد الأقصى حسب الكمية (السعر < 5)؛ الحد الأدنى حسب السعر (الكمية >= 10)
quiz iconاختبر نفسك

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

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

تدرّب بنفسك: مترجم Ruby عبر الإنترنت