Filtrar por Gênero
Parte da seção Lógica e fluxo do Journey de Ruby da Coddy. Lição 31 de 56.
Adicione a opção 3. Filter By Genre. O usuário digita um gênero e o programa lista todos os livros nesse gênero exato, com correspondência case-sensitive desta vez.
Você também relatará uma contagem, usando count do capítulo anterior.
Desafio
FácilEstenda o loop do menu. Quando a escolha for "3":
printa solicitaçãoGenre:e leia-aselectos livros cujo:genreseja exatamente igual à entrada- Imprima uma linha por correspondência:
<title> by <author> - Após a lista, imprima
Total: <n>ondené a contagem de correspondências (usecountoumatches.length)
Mantenha todos os ramos anteriores intactos.
Para entradas que adicionam dois livros de Fantasy e um livro de Sci-Fi, depois filtram por Fantasy e saem, o bloco de filtro deve imprimir ambos os livros de fantasia e Total: 2.
Experimente você mesmo
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!"
elsif choice == "2"
print "Search title: "
query = gets.chomp
matches = library.select { |b| b[:title].downcase.include?(query.downcase) }
if matches.empty?
puts "No matches."
else
matches.each { |b| puts "#{b[:title]} by #{b[:author]}" }
end
end
# TODO: tratar choice == "3", solicitar o gênero,
# selecionar livros correspondentes, imprimir cada um, depois "Total: <n>"
end
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e fluxo
1Strings em Profundidade
Visão Geral dos Métodos de StringInterpolação de StringsPercorrendo StringsDividir e UnirRecapitulação - String Weaver4Blocos, Procs e Lambdas
O que é um Bloco?do..end vs ChavesA Palavra-chave yieldParâmetros de BlocoProcs e LambdasRevisão - Iterador Personalizado7Hashes - Parte 2
Hash.new com Valores PadrãoIterando sobre HashesHashes AninhadosMesclando e TransformandoRecapitulação - Contador de Frequência10Projeto - Registros de Alunos
Visão Geral do ProjetoAdicionar Aluno2Intervalos
O que é um intervalo?Métodos de intervaloIntervalos em Case / WhenRevisão - Prática com intervalos5Potência do Enumerable
Select e RejectEncadeando MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRecapitulação - Pipeline de Dados3Arrays 2D
Fundamentos de Arrays 2DAcessando elementos 2DPercorrendo Arrays 2DPadrões comuns em 2DRecapitulação - Operações com matrizes6Projeto - Gerenciador de Biblioteca
Visão Geral do ProjetoAdicionar LivroPratique por conta própria: Compilador de Ruby online