Menu
Coddy logo textTech

장르별 필터링

Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 31번째.

3. Filter By Genre 옵션을 추가합니다. 사용자가 장르를 입력하면 프로그램이 해당 장르와 정확히 일치하는 모든 도서를 나열하며, 이번에는 대소문자를 구분하여 매칭합니다.

또한 이전 장의 count를 사용하여 개수를 보고하게 될 것입니다.

challenge icon

챌린지

쉬움

메뉴 루프를 확장하세요. 선택지가 "3"일 때:

  1. print를 사용하여 Genre: 프롬프트를 출력하고 값을 읽습니다.
  2. :genre가 입력값과 정확히 일치하는 책들을 select합니다.
  3. 일치하는 항목마다 한 줄씩 <title> by <author> 형식으로 출력합니다.
  4. 목록 다음에, 일치하는 개수인 n을 포함하여 Total: <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실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨