제목으로 검색
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 30번째.
2. Search By Title 옵션을 추가하세요. 사용자가 검색어를 입력하면, 프로그램은 제목에 해당 검색어가 포함된 모든 도서를 대소문자 구분 없이 출력합니다.
이전 장에서 배운 select가 진가를 발휘하는 부분입니다. 수동 루프 없이 하나의 블록으로 처리할 수 있습니다:
matches = library.select do |book|
book[:title].downcase.include?(query.downcase)
end챌린지
쉬움메뉴 루프를 확장하세요. 선택지가 "2"일 때:
print를 사용하여Search title:프롬프트를 출력하고 쿼리를 읽습니다.select를 사용하여 제목(대소문자 구분 없음)에 쿼리가 포함된 도서를 찾습니다.- 일치하는 항목이 없으면
No matches.를 출력합니다. - 그렇지 않으면 일치하는 각 항목에 대해
<title> by <author>형식으로 한 줄씩 출력합니다.
이전 레슨의 1 (Add Book) 및 5 (Exit) 동작을 그대로 유지하세요.
입력값이 1, The Hobbit, Tolkien, Fantasy, 2, hobbit, 그리고 5인 경우, 일치하는 출력 블록은 다음과 같습니다:
Choose an option: Search title: The Hobbit by Tolkien치트 시트
대소문자를 구분하지 않는 제목 검색을 위해 select와 downcase.include?를 사용하세요:
matches = library.select do |book|
book[:title].downcase.include?(query.downcase)
end결과 또는 대체 메시지를 출력합니다:
if matches.empty?
puts "No matches."
else
matches.each { |book| puts "#{book[:title]} by #{book[:author]}" }
end직접 해보기
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!"
end
# TODO: choice == "2" 처리, 검색어 입력 받기, 일치하는 도서 선택,
# "No matches." 출력 또는 일치하는 항목당 한 줄씩 출력: "<title> by <author>"
end
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.