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 מאחד את שני השלבים האלה לאחד.
אתגר
קלקרא שתי שורות קלט:
- רשימה של מספרים שלמים המופרדים בפסיקים,
nums - רשימה של מספרים שלמים המופרדים בפסיקים,
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:); לחבר באמצעות ","
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
5פונקציות מסדר גבוה חלק 1
מיפוי (Map)סינון (Filter)צמצום (Reduce)שרשור map, filter ו-reduceסיכום – סטטיסטיקות מיליםתרגלו בעצמכם: Swift אונליין