Menu
Coddy logo textTech

סינון (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]

קרא כל שרשרת מלמעלה למטה, ממש כמו צינור עיבוד. כל שלב יוצר מערך חדש; שום דבר לא משנה את המקורי.

challenge icon

אתגר

קל

קרא שתי שורות קלט:

  1. רשימה של מספרים שלמים המופרדים בפסיקים
  2. מספר שלם min

הדפס, בשורות נפרדות:

  1. את המספרים השלמים שגדולים ממש מ־min, כשהם מחוברים באמצעות , (או פלט ריק אם אף אחד מהם לא עומד בתנאי)
  2. את הריבועים של המספרים השלמים שעומדים בתנאי, כשהם מחוברים באמצעות ,
  3. את מספר המספרים השלמים שעומדים בתנאי

השתמש בשרשרת של 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 פעם אחת, ואז המר לריבועים; הדפס את שניהם, ואז את הכמות
quiz iconבחנו את עצמכם

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

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

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