Menu
Coddy logo textTech

flatMap

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

flatMap מיועדת למקרים שבהם כל איבר מפיק כמה תוצאות. הסגירה מחזירה מערך; flatMap מחברת את כולם למערך שטוח אחד.

let groups = [[1, 2, 3], [4, 5], [6]]
let all = groups.flatMap { $0 }
print(all)                       // [1, 2, 3, 4, 5, 6]

אפשר לבצע עבודה אמיתית גם בתוך הסגירה. מיפוי של כל ערך למערך קטן ושטיחה של התוצאה בצעד אחד הם מקרה השימוש הטיפוסי:

let nums = [1, 2, 3]
let pairs = nums.flatMap { [$0, $0 * $0] }
print(pairs)                     // [1, 1, 2, 4, 3, 9]

השוו ל־map: פעולה זו הייתה יוצרת [[Int]], מערך של מערכים קטנים, שהיה צריך שלב נוסף כדי לשטח אותו. flatMap מאחד את שני השלבים האלה לאחד.

challenge icon

אתגר

קל

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

  1. רשימה של מספרים שלמים המופרדים בפסיקים, nums
  2. רשימה של מספרים שלמים המופרדים בפסיקים, repeats (באותו אורך כמו nums)

עבור כל i, חזור על nums[i] בדיוק repeats[i] פעמים. הדפס את המערך השטוח שנוצר, כשהערכים מופרדים באמצעות ,. השתמש ב-flatMap.

עבור הקלט 5,7,2 בשורה 1 ו-3,1,2 בשורה 2, הפלט הוא 5,5,5,7,2,2.

נסו בעצמכם

let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let repeats = readLine()!.components(separatedBy: ",").map { Int($0)! }

// TODO: להשתמש ב־flatMap כדי להפוך כל זוג (num, repeat) ל־Array(repeating:count:); לחבר באמצעות ","
quiz iconבחנו את עצמכם

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

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

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