Поиск по названию
Часть раздела Логика и управление потоком путешествия по Ruby на Coddy. Урок 30 из 56.
Добавьте опцию 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Попробуйте сами
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
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки: подробный разбор
Обзор методов строкИнтерполяция строкПеребор строкРазделение и объединениеПовторение — String Weaver4Блоки, Proc и Lambda
Что такое блок?do..end и фигурные скобкиКлючевое слово yieldПараметры блокаProc и LambdaПовторение — пользовательский итератор7Хэши, часть 2
Hash.new со значениями по умолчаниюПеребор хэшейВложенные хэшиОбъединение и преобразованиеПовторение — счётчик частот10Проект — Учёт студентов
Обзор проектаДобавление студента2Диапазоны
Что такое диапазон?Методы диапазоновДиапазоны в Case / WhenПовторение — практика с диапазонами5Мощь Enumerable
Select и RejectЦепочка вызовов mapReduce / Injectcount, all?, any?, none?group_by и partitionsort_by, min_by, max_byПовторение — конвейер данных3Двумерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваПеребор двумерных массивовРаспространённые шаблоны для двумерных массивовПовторение — операции с матрицами6Проект — Менеджер библиотеки
Обзор проектаДобавление книгиПотренируйтесь самостоятельно: Онлайн-компилятор Ruby