Menu
Coddy logo textTech

בניית צינורות עיבוד

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Swift של Coddy. שיעור 31 מתוך 56.

השיטות שאספת, map, filter, reduce, compactMap, flatMap, sorted(by:), הן ארגז הכלים היומיומי של Swift. בקוד אמיתי משלבים ביניהן.

struct Order {
    let item: String
    let qty: Int
}
let orders = [Order(item: "apple", qty: 3), Order(item: "bread", qty: 0), Order(item: "milk", qty: 5)]
let names = orders
    .filter { $0.qty > 0 }
    .sorted { $0.qty > $1.qty }
    .map { $0.item }
print(names)                  // ["milk", "apple"]

קרא את השרשרת מלמעלה למטה: השאר הזמנות שאינן ריקות, מיין לפי הכמות בסדר יורד, ואז השאר רק את השמות.

צינורות עיבוד יעילים יותר כשכל שלב ממלא מטרה אחת. אם שמים לב שעושים שני דברים בו־זמנית בתוך סגירה (מיפוי וגם סינון), פצלו אותם לשני שלבים. השרשרת נשארת קריאה גם כשהיא מתארכת.

challenge icon

אתגר

בינוני

קרא שורת קלט אחת: רשימה מופרדת בפסיקים של רשומות name:price:qty. חלק מהרשומות פגומות ויש לדלג עליהן: כל רשומה שהמחיר או הכמות שבה אינם מספר שלם תקין.

בנה צינור עיבוד שמפיק שורה אחת לכל רשומה תקינה שעבורה qty > 0, ממוינות לפי הסכום הכולל (price * qty) בסדר יורד, בפורמט:

<name>: <total>

אחרי השורות לכל פריט, הדפס שורת סיכום אחת: Sum: <n> עם הסכום הכולל.

עבור הקלט apple:3:2,bread:bad:1,milk:4:5,cheese:8:0,salt:2:7, הפלט הוא:

milk: 20
salt: 14
apple: 6
Sum: 40

נסו בעצמכם

let entries = readLine()!.components(separatedBy: ",")

// TODO: שרשור פעולות באמצעות compactMap (פענוח), filter (qty > 0),
// sorted (total בסדר יורד), map (עיצוב); הדפסת השורות + Sum
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: Swift אונליין