Okundu Olarak İşaretle
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 32 / 56.
Son seçeneği ekleyin: 4. Mark As Read. Kullanıcı tam bir başlık yazar ve program o kitabın :read anahtarını false değerinden true değerine çevirir.
Kitabı bulmak için find kullanın: blokla eşleşen ilk öğeyi veya hiçbir şey eşleşmediğinde nil döndürür:
book = library.find { |b| b[:title] == query }Eğer book nil ise, hiçbir kitap bulunamadığını bildirin. Aksi takdirde, onu yerinde değiştirin; Ruby hash'leri dizi içinde kimliklerini paylaşırlar, bu nedenle book[:read] değerini güncellemek library içinde saklanan girişi de günceller.
Görev
KolayMenü döngüsünü "4" dalı ile genişletin:
Title:isteminiprintile yazdırın ve okuyun- Tam olarak bu başlığa sahip kitabı bulmak için
findkullanın - Eşleşme yoksa,
Not found.yazdırın - Aksi takdirde,
book[:read] = trueolarak ayarlayın veMarked as read!yazdırın
Önceki tüm dalların çalışmaya devam etmesini sağlayın.
The Hobbit kitabını ekleyen, onu okundu olarak işaretleyen ve ardından çıkış yapan girdiler için, işaretleme bloğu şunu yazdırır:
Choose an option: Title: Marked as read!Kopya kağıdı
Bir dizideki ilk eşleşen öğeyi bulmak için find kullanın (bulunamazsa nil döner):
book = library.find { |b| b[:title] == query }Hash'ler diziler içinde kimlik paylaştığı için, bulunan nesneyi değiştirmek orijinal girişi günceller:
if book.nil?
puts "Not found."
else
book[:read] = true
puts "Marked as read!"
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!"
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
elsif choice == "3"
print "Genre: "
genre = gets.chomp
matches = library.select { |b| b[:genre] == genre }
matches.each { |b| puts "#{b[:title]} by #{b[:author]}" }
puts "Total: #{matches.length}"
end
# YAPILACAK: choice == "4" durumunu işle, tam başlığa göre bul,
# book[:read] = true olarak ayarla, "Marked as read!" veya "Not found." yazdır.
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