Menu
CoddyTech

Tìm kiếm theo tiêu đề

Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 30 trên 56.

Thêm tùy chọn 2. Search By Title. Người dùng nhập một từ khóa tìm kiếm, rồi chương trình in ra mọi cuốn sách có tiêu đề chứa từ khóa đó, không phân biệt chữ hoa chữ thường.

Đây là lúc select ở chương trước phát huy tác dụng, chỉ với một khối lệnh, không cần vòng lặp thủ công:

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

Thử thách

Dễ

Mở rộng vòng lặp menu. Khi lựa chọn là "2":

  1. print lời nhắc Search title: rồi đọc truy vấn
  2. Dùng select để tìm sách có tiêu đề chứa truy vấn, không phân biệt chữ hoa chữ thường
  3. Nếu không có kết quả khớp, in ra No matches.
  4. Nếu có, in ra mỗi kết quả khớp trên một dòng theo định dạng này: <title> by <author>

Giữ nguyên cách hoạt động của 1 (Thêm sách) và 5 (Thoát) từ các bài học trước.

Với các đầu vào 1, The Hobbit, Tolkien, Fantasy, 2, hobbit, rồi đến 5, phần đầu ra khớp sẽ trông như sau:

Choose an option: Search title: The Hobbit by Tolkien

Tự làm thử

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: xử lý choice == "2", yêu cầu nhập truy vấn (query), chọn các cuốn sách phù hợp,
  # in ra "No matches." hoặc mỗi kết quả trên một dòng: "<title> by <author>"
end
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng xử lý

Tự luyện tập: Trình biên dịch Ruby online