Reduce
Coddy Swift 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 25번째.
reduce는 전체 배열을 단일 값으로 축소합니다. 합계, 곱셈, 최댓값/최솟값 찾기 또는 여러 요소로부터 새로운 문자열이나 배열을 생성할 때 사용합니다.
let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n }
print(total) // 10첫 번째 인수는 초기 누산기(initial accumulator)입니다. 클로저는 현재 실행 중인 누산기와 다음 요소를 받아서 새로운 누산기를 반환합니다. 누산기의 최종 값이 결과가 됩니다.
산술 연산자의 경우, Swift는 기호 기반의 단축 표현을 제공합니다:
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24reduce가 반드시 숫자를 반환해야 하는 것은 아닙니다. 누산기(accumulator)는 어떤 타입이든 될 수 있으며, 여러분이 직접 결정할 수 있습니다:
let sentence = ["hi", "there"].reduce("") { $0 + $1 + "!" }
print(sentence) // "hi!there!"챌린지
쉬움한 줄의 입력을 읽으십시오: 쉼표로 구분된 정수 목록입니다. 각각에 대해 reduce를 사용하여 세 줄을 출력하십시오:
- 합계
- 곱
- 최댓값 (두 인자 중 더 큰 값을 반환하는 클로저를 사용하고,
.max()를 호출하지 마십시오)
최소한 하나의 요소가 있다고 가정합니다. 최댓값의 경우, nums[0]를 초기 누적값으로 사용하고 배열의 나머지 부분을 reduce할 수 있습니다.
입력 3,7,2,8,4에 대한 출력은 다음과 같습니다:
24
1344
8치트 시트
reduce는 초기 누적값(accumulator)과 클로저를 사용하여 배열을 단일 값으로 축소합니다:
let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n } // 10산술 연산자에 대한 단축 표현:
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24누적값은 어떤 타입이든 될 수 있습니다:
["hi", "there"].reduce("") { $0 + $1 + "!" } // "hi!there!"reduce를 사용하여 최댓값을 찾으려면, 첫 번째 요소를 초기값으로 사용하세요:
let maxVal = nums.dropFirst().reduce(nums[0]) { $0 > $1 ? $0 : $1 }직접 해보기
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: reduce를 사용하여 합계, 곱, 최댓값 구하기
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.