장르별 필터링
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 31번째.
3. Filter By Genre 옵션을 추가합니다. 사용자가 장르를 입력하면 프로그램이 해당 장르와 정확히 일치하는 모든 도서를 나열하며, 이번에는 대소문자를 구분하여 매칭합니다.
또한 이전 장의 count를 사용하여 개수를 보고하게 될 것입니다.
챌린지
쉬움메뉴 루프를 확장하세요. 선택지가 "3"일 때:
print를 사용하여Genre:프롬프트를 출력하고 값을 읽습니다.:genre가 입력값과 정확히 일치하는 책들을select합니다.- 일치하는 항목마다 한 줄씩
<title> by <author>형식으로 출력합니다. - 목록 다음에, 일치하는 개수인
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
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.