Menu
Coddy logo textTech

제목으로 검색

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

2. Search By Title 옵션을 추가하세요. 사용자가 검색어를 입력하면, 프로그램은 제목에 해당 검색어가 포함된 모든 도서를 대소문자 구분 없이 출력합니다.

이전 장에서 배운 select가 진가를 발휘하는 부분입니다. 수동 루프 없이 하나의 블록으로 처리할 수 있습니다:

matches = library.select do |book|
  book[:title].downcase.include?(query.downcase)
end
challenge icon

챌린지

쉬움

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

  1. print를 사용하여 Search title: 프롬프트를 출력하고 쿼리를 읽습니다.
  2. select를 사용하여 제목(대소문자 구분 없음)에 쿼리가 포함된 도서를 찾습니다.
  3. 일치하는 항목이 없으면 No matches.를 출력합니다.
  4. 그렇지 않으면 일치하는 각 항목에 대해 <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

치트 시트

대소문자를 구분하지 않는 제목 검색을 위해 selectdowncase.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
quiz icon실력 점검

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

로직 및 흐름의 모든 레슨