Menu
CoddyTech

按书名搜索

本课属于 Coddy Ruby 学习旅程的“逻辑与流程”单元。第 30 课,共 56 课。

添加 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(添加书籍)和 5(退出)的行为。

对于输入 1、The Hobbit、Tolkien、Fantasy、2、hobbit,然后输入 5,匹配项对应的输出部分如下:

Choose an option: Search title: The Hobbit by Tolkien

亲手试试

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自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Ruby 在线编译器