חיפוש אופציונלי
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Swift של Coddy. שיעור 13 מתוך 56.
גישה לתת־מפתח במילון תמיד מחזירה Optional: את הערך כשהמפתח קיים, ואת nil כשהוא לא קיים. Swift מחייבת אותך לטפל בשני המקרים.
let prices: [String: Int] = ["apple": 1, "bread": 3]
let p = prices["apple"]
print(p) // Optional(1)שלוש דרכים מקובלות להתמודד עם האופציונלי. בחרו בזו שמתאימה למצב.
1. if let: טפלו בשני הענפים במפורש:
if let p = prices["apple"] {
print("apple costs \(p)")
} else {
print("unknown")
}2. איחוד ערכי nil ??: ספקו ערך חלופי בשורה:
let p = prices["olive"] ?? 0 // 03. גישה באמצעות אינדקס עם ערך ברירת מחדל: התוצאה זהה, אבל ערך ברירת המחדל נשאר גם אם כותבים בחזרה למפתח הזה:
var counts = ["a": 2]
counts["b", default: 0] += 1 // counts == ["a": 2, "b": 1]אתגר
קלהמילון prices נתון. קראו שורת קלט אחת: רשימת פריטים המופרדים בפסיקים שהמשתמש רוצה לקנות.
עבור כל פריט, לפי סדר הקלט, חפשו אותו ב־prices. הדפיסו שורה אחת לכל פריט:
<item> @ <price>כאשר הפריט נמצא במילון<item> not soldאחרת
לאחר הצגת כל הפריטים, הדפיסו שורה אחרונה אחת: Total: <sum>. התייחסו לפריטים חסרים כאילו עלותם היא 0, באמצעות אופרטור איחוד ערכי nil.
עבור הקלט apple,bread,olive,milk, הפלט הוא:
apple @ 1
bread @ 3
olive not sold
milk @ 4
Total: 8נסו בעצמכם
let prices: [String: Int] = ["apple": 1, "bread": 3, "milk": 4]
let items = readLine()!.components(separatedBy: ",")
// TODO: חיפוש מחיר לכל פריט; להדפיס '@ price' או 'not sold'; לחשב את הסכום עם ?? 0
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
5פונקציות מסדר גבוה חלק 1
מיפוי (Map)סינון (Filter)צמצום (Reduce)שרשור map, filter ו-reduceסיכום – סטטיסטיקות מיליםתרגלו בעצמכם: Swift אונליין