סינון (Filter)
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Swift של Coddy. שיעור 24 מתוך 56.
filter מקבלת סגירת predicate ומחזירה מערך חדש שמכיל רק את האיברים שעבורם הסגירה החזירה true.
let nums = [1, 2, 3, 4, 5, 6]
let evens = nums.filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6]התוצאה שומרת על הסדר המקורי. סוג התוצאה תואם לסוג הקלט; לא מתבצעת שום המרה, אלא רק בחירה.
filter משתלב באופן טבעי בשרשור עם map:
let big = nums
.filter { $0 > 2 }
.map { $0 * $0 }
print(big) // [9, 16, 25, 36]קרא כל שרשרת מלמעלה למטה, ממש כמו צינור עיבוד. כל שלב יוצר מערך חדש; שום דבר לא משנה את המקורי.
אתגר
קלקרא שתי שורות קלט:
- רשימה של מספרים שלמים המופרדים בפסיקים
- מספר שלם
min
הדפס, בשורות נפרדות:
- את המספרים השלמים שגדולים ממש מ־
min, כשהם מחוברים באמצעות,(או פלט ריק אם אף אחד מהם לא עומד בתנאי) - את הריבועים של המספרים השלמים שעומדים בתנאי, כשהם מחוברים באמצעות
, - את מספר המספרים השלמים שעומדים בתנאי
השתמש בשרשרת של filter + map. אל תעבור על הקלט פעמיים.
עבור הקלט 1,5,2,8,3,7 בשורה 1 ו־4 בשורה 2, הפלט הוא:
5,8,7
25,64,49
3נסו בעצמכם
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let min = Int(readLine()!)!
// TODO: סנן את הערכים > min פעם אחת, ואז המר לריבועים; הדפס את שניהם, ואז את הכמות
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
5פונקציות מסדר גבוה חלק 1
מיפוי (Map)סינון (Filter)צמצום (Reduce)שרשור map, filter ו-reduceסיכום – סטטיסטיקות מיליםתרגלו בעצמכם: Swift אונליין