חיפוש לפי כותרת
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 30 מתוך 56.
הוסיפו את האפשרות 2. Search By Title. המשתמש מקליד מונח חיפוש, והתוכנית מדפיסה כל ספר שהכותרת שלו מכילה את המונח, ללא תלות ברישיות.
כאן select מהפרק הקודם מוכיח את עצמו — בלוק אחד, בלי לולאה ידנית:
matches = library.select do |book|
book[:title].downcase.include?(query.downcase)
endאתגר
קלהרחיבו את לולאת התפריט. כאשר הבחירה היא "2":
- השתמשו ב-
printכדי להציג את ההנחיהSearch title:וקראו את השאילתה - השתמשו ב-
selectכדי למצוא ספרים שהכותרת שלהם כוללת את השאילתה (ללא תלות באותיות רישיות או קטנות) - אם אין התאמות, הדפיסו
No matches. - אחרת, הדפיסו שורה אחת לכל התאמה בפורמט הזה:
<title> by <author>
השאירו את ההתנהגויות של 1 (הוספת ספר) ושל 5 (יציאה) מהשיעורים הקודמים.
עבור הקלטים 1, The Hobbit, Tolkien, Fantasy, 2, hobbit, ואז 5, בלוק הפלט התואם נראה כך:
Choose an option: Search title: The Hobbit by Tolkienנסו בעצמכם
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
# TODO: לטפל ב־choice == "2", לבקש שאילתת חיפוש, לבחור ספרים תואמים,
# להדפיס "No matches." או שורה אחת לכל התאמה: "<title> by <author>"
end
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מחרוזות לעומק
סקירה של מתודות למחרוזותאינטרפולציה של מחרוזותמעבר על מחרוזותפיצול וחיבורסיכום – שוזר המחרוזות4בלוקים, Procs ו־Lambdas
מהו בלוק?do..end לעומת סוגריים מסולסליםמילת המפתח yieldפרמטרים של בלוקProcs ו־Lambdasסיכום – איטרטור מותאם אישית7Hashes חלק 2
Hash.new עם ערכי ברירת מחדלמעבר על HashesHashes מקונניםמיזוג ושינויסיכום - מונה תדירויות10פרויקט - רשומות תלמידים
סקירת הפרויקטהוספת תלמיד5עוצמת Enumerable
Select ו־Rejectשרשור MapReduce / Injectcount, all?, any?, none?group_by ו־partitionsort_by, min_by, max_byסיכום - צינור נתוניםתרגלו בעצמכם: קומפיילר Ruby אונליין