Başlığa Göre Ara
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 30 / 56.
2. Search By Title seçeneğini ekleyin. Kullanıcı bir arama terimi yazar ve program, başlığı bu terimi içeren her kitabı büyük/küçük harf duyarsız olarak yazdırır.
İşte önceki bölümdeki select yönteminin karşılığını verdiği yer; tek bir blok, manuel döngü yok:
matches = library.select do |book|
book[:title].downcase.include?(query.downcase)
endGörev
KolayMenü döngüsünü genişletin. Seçim "2" olduğunda:
Search title:isteminiprintile yazdırın ve sorguyu okuyun- Başlığı (büyük/küçük harf duyarsız) sorguyu içeren kitapları bulmak için
selectkullanın - Eğer eşleşme yoksa,
No matches.yazdırın - Aksi takdirde, her eşleşme için şu formatta bir satır yazdırın:
<title> by <author>
Önceki derslerdeki 1 (Add Book) ve 5 (Exit) davranışlarını koruyun.
1, The Hobbit, Tolkien, Fantasy, 2, hobbit ve ardından 5 girişleri için, eşleşen çıktı bloğu şu şekilde görünür:
Choose an option: Search title: The Hobbit by TolkienKopya kağıdı
Büyük/küçük harf duyarsız başlık araması için select yöntemini downcase.include? ile birlikte kullanın:
matches = library.select do |book|
book[:title].downcase.include?(query.downcase)
endSonuçları veya bir yedek mesajı yazdırın:
if matches.empty?
puts "No matches."
else
matches.each { |book| puts "#{book[:title]} by #{book[:author]}" }
endKendin dene
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
# YAPILACAK: choice == "2" durumunu işle, sorgu iste, eşleşen kitapları seç,
# "Eşleşme bulunamadı." veya her eşleşme için bir satır yazdır: "<title> by <author>"
end
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Derinlemesine Stringler
String Metotlarına Genel BakışString InterpolationStringler Üzerinde GezinmeSplit ve JoinÖzet - String Weaver4Bloklar, Procs ve Lambdalar
Blok Nedir?do..end ve Süslü Parantezleryield Anahtar KelimesiBlok ParametreleriProcs ve LambdalarÖzet - Özel İteratör7Hashes Bölüm 2
Varsayılan Değerlerle Hash.newHash Yapıları Üzerinde Yinelemeİç İçe Hash YapılarıBirleştirme ve DönüştürmeÖzet - Frekans Sayacı10Proje - Öğrenci Kayıtları
Projeye Genel BakışÖğrenci Ekle5Enumerable Gücü
Select ve RejectMap ZincirlemeReduce / Injectcount, all?, any?, none?group_by ve partitionsort_by, min_by, max_byÖzet - Data Pipeline8İleri Seviye Karar Yapıları
Sınıflar ve Regex ile CaseÇok Değerli whenTernary OperatörüSatır İçi if / unlessÖzet - Not Sınıflandırıcı32D Diziler
2D Dizi Temelleri2D Elemanlara Erişim2D Diziler Üzerinde YinelemeYaygın 2D KalıplarÖzet - Matris İşlemleri6Proje - Kütüphane Yöneticisi
Projeye Genel BakışKitap Ekle