Menu
Coddy logo textTech

flatMap

Coddy Swift 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 29번째.

flatMap은 각 요소가 여러 개의 결과를 생성하는 경우를 위한 것입니다. 클로저는 배열을 반환하며, flatMap은 이들 모두를 하나의 평평한 배열로 연결합니다.

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

클로저 내부에서도 실제 작업을 수행할 수 있습니다. 각 값을 작은 배열로 매핑하고 그 결과를 한 단계로 평탄화(flattening)하는 것이 일반적인 사용 사례입니다:

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

map과 비교해 보세요: map은 작은 배열들의 배열인 [[Int]]를 생성했을 것이며, 이를 평탄화하기 위해 또 다른 단계가 필요했을 것입니다. flatMap은 이 두 단계를 하나로 합칩니다.

challenge icon

챌린지

쉬움

두 줄의 입력을 읽습니다:

  1. 쉼표로 구분된 정수 목록인 nums
  2. 쉼표로 구분된 정수 목록인 repeats (nums와 동일한 길이)

i에 대해, nums[i]를 정확히 repeats[i]번 반복합니다. 결과로 나온 평탄화된 배열을 ,로 연결하여 출력합니다. flatMap을 사용하세요.

첫 번째 줄에 5,7,2, 두 번째 줄에 3,1,2가 입력으로 주어지면, 출력은 5,5,5,7,2,2입니다.

치트 시트

flatMap은 각 요소를 배열로 매핑하고 모든 결과를 하나의 단일 평면 배열로 병합합니다:

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

map([[Int]]을 생성함)과 달리, flatMap은 한 단계로 평면화합니다. 또한 중첩된 배열을 직접 평면화할 수도 있습니다:

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

직접 해보기

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

// TODO: 각 (num, repeat)을 Array(repeating:count:)로 flatMap하고 ","로 연결하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨