Menu
CoddyTech

Фильтрация по жанру

Часть раздела Логика и потоки выполнения путешествия по Ruby на Coddy. Урок 31 из 56.

Добавьте опцию 3. Filter By Genre. Пользователь вводит жанр, и программа выводит список всех книг в этом конкретном жанре, на этот раз с учетом регистра.

Вы также сообщите количество, используя count из предыдущей главы.

challenge icon

Задание

Легко

Расширьте цикл меню. Когда выбран вариант "3":

  1. print приглашение Genre: и прочитайте его
  2. select книги, чей :genre в точности совпадает с введенным значением
  3. Выведите по одной строке для каждого совпадения: <title> by <author>
  4. После списка выведите Total: <n>, где n — это количество совпадений (используйте count или matches.length)

Оставьте все предыдущие ветки без изменений.

Для входных данных, добавляющих две книги жанра Fantasy и одну книгу Sci-Fi, затем фильтрующих по 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: обработать choice == "3", запросить жанр,
  # выбрать подходящие книги, вывести каждую, затем "Total: <n>"
end
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор Ruby