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

التصفية حسب النوع

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

أضف خيار 3. Filter By Genre. يقوم المستخدم بكتابة النوع ويقوم البرنامج بسرد كل كتاب في ذلك النوع المحدد، مع مطابقة حالة الأحرف هذه المرة.

ستقوم أيضًا بالإبلاغ عن عدد، باستخدام count من الفصل السابق.

challenge icon

التحدي

سهل

قم بتوسيع حلقة القائمة (menu loop). عندما يكون الخيار "3":

  1. استخدم print لعرض الطلب Genre: وقم بقراءته
  2. استخدم select لاختيار الكتب التي يتطابق فيها :genre مع المدخلات تماماً
  3. اطبع سطراً واحداً لكل تطابق: <title> by <author>
  4. بعد القائمة، اطبع Total: <n> حيث n هو عدد التطابقات (استخدم count أو matches.length)

حافظ على جميع الفروع السابقة كما هي دون تغيير.

بالنسبة للمدخلات التي تضيف كتابين من نوع Fantasy وكتاباً واحداً من نوع Sci-Fi، ثم التصفية حسب Fantasy والخروج، يجب أن يطبع جزء التصفية كلا الكتابين من نوع fantasy و Total: 2.

جرّب بنفسك

library = []

loop do
  puts "--- Library Manager ---"
  puts "1. Add Book"
  puts "2. Search By Title"
  puts "3. Filter By Genre"
  puts "4. Mark As Read"
  puts "5. Exit"
  print "Choose an option: "
  choice = gets.chomp
  if choice == "5"
    puts "Goodbye!"
    break
  elsif choice == "1"
    print "Title: "
    title = gets.chomp
    print "Author: "
    author = gets.chomp
    print "Genre: "
    genre = gets.chomp
    library.push({ title: title, author: author, genre: genre, read: false })
    puts "Book added!"
  elsif choice == "2"
    print "Search title: "
    query = gets.chomp
    matches = library.select { |b| b[:title].downcase.include?(query.downcase) }
    if matches.empty?
      puts "No matches."
    else
      matches.each { |b| puts "#{b[:title]} by #{b[:author]}" }
    end
  end
  # TODO: التعامل مع الخيار == "3"، طلب النوع،
  # اختيار الكتب المطابقة، طباعة كل منها، ثم "الإجمالي: <n>"
end
quiz iconاختبر نفسك

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

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

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