Tandai Sudah Dibaca
Termasuk bagian Logika dan Alur dalam perjalanan Ruby di Coddy. Pelajaran 32 dari 56.
Tambahkan opsi terakhir, 4. Mark As Read. Pengguna mengetik judul yang persis, lalu program mengubah kunci :read buku itu dari false menjadi true.
Untuk menemukan buku, gunakan find: fungsi ini mengembalikan elemen pertama yang cocok dengan blok, atau nil jika tidak ada yang cocok:
book = library.find { |b| b[:title] == query }Jika book adalah nil, laporkan bahwa buku tidak ditemukan. Jika tidak, ubah nilainya langsung. Hash Ruby berbagi identitas di dalam array, jadi memperbarui book[:read] juga memperbarui entri yang tersimpan di library.
Tantangan
MudahPerluas perulangan menu dengan cabang "4":
printpromptTitle:lalu baca judulnya- Gunakan
finduntuk menemukan buku dengan judul yang sama persis - Jika tidak ada yang cocok, cetak
Not found. - Jika tidak, atur
book[:read] = truelalu cetakMarked as read!
Pastikan semua cabang sebelumnya tetap berfungsi.
Untuk input yang menambahkan The Hobbit, menandainya sudah dibaca, lalu keluar, blok penandaan mencetak:
Choose an option: Title: Marked as read!Coba sendiri
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
# TODO: tangani choice == "4", cari berdasarkan judul yang persis sama,
# atur book[:read] = true, tampilkan "Marked as read!" atau "Not found."
end
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami String
Ringkasan Method StringInterpolasi StringMenelusuri StringMemisahkan dan MenggabungkanRekap: Perangkai String4Block, Proc, dan Lambda
Apa Itu Block?do..end vs Kurung KurawalKata Kunci yieldParameter BlockProc dan LambdaRangkuman, Iterator Kustom5Andalan Enumerable
Select dan RejectMerangkai MapReduce / Injectcount, all?, any?, none?group_by dan partitionsort_by, min_by, max_byRekap: Alur Data8Pengambilan Keputusan Lanjutan
Case dengan class & regexwhen dengan Banyak NilaiOperator Ternaryif / unless SebarisUlasan, Pengklasifikasi Nilai3Array 2D
Dasar Array 2DMengakses Elemen Array 2DMenelusuri Array 2DPola Umum Array 2DRekap: Operasi Matriks6Proyek: Pengelola Perpustakaan
Ikhtisar ProyekTambahkan BukuLatihan sendiri: Compiler Ruby online