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!Kendin 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
1Dizeler Detaylı İnceleme
Dize Metotlarına Genel BakışDize EnterpolasyonuDizeler Üzerinde YinelemeBölme ve BirleştirmeTekrar - Dize Dokuyucu4Bloklar, Proc'lar ve Lambda'lar
Blok Nedir?do..end ve Süslü Parantezleryield Anahtar SözcüğüBlok ParametreleriProc'lar ve Lambda'larÖzet - Özel Yineleyici7Hash'ler 2. Bölüm
Varsayılanlarla Hash.newHash'ler Üzerinde Yinelemeİç İçe Hash'lerBirleştirme ve DönüştürmeTekrar - Frekans Sayacı10Proje - Öğrenci Kayıtları
Projeye Genel BakışÖğrenci Ekle5Enumerable Gücü
Seçme ve ReddetmeMap ZincirlemeReduce / Injectcount, all?, any?, none?group_by ve partitionsort_by, min_by, max_byTekrar - Veri Hattı32B Diziler
2B Dizi Temelleri2B Elemanlara Erişim2B Diziler Üzerinde YinelemeYaygın 2B ÖrüntülerTekrar - Matris İşlemleri6Proje - Kütüphane Yöneticisi
Projeye Genel BakışKitap EkleKendi başına pratik yap: Online Ruby derleyicisi