참조
프로그래머스에서 내적 구하는 문제 풀었는데 (물론 쉬웠음), 이걸 어떻게 하면 더 간단하게 풀까 하며 다른 사람의 풀이를 참고하였다. 그런 와중에 zip()이라는 함수를 알게 되었는데 쏘어메이징 유레카 이마를 딱 칠 정도로 신박해서 기록 남기려고 이 글 쓴다.
1️⃣ zip(::)
두 개의 기본 시퀀스로 구성된 일련의 쌍을 만드는 함수
Declaration
func zip<Sequence1, Sequence2>(_ sequence1: Sequence1, _ sequence2: Sequence2) -> Zip2Sequence<Sequence1, Sequence2> where Sequence1 : Sequence, Sequence2 : Sequence
Parameter
Sequence1: zip할 첫번째 시퀀스 또는 콜렉션
Sequence2: zip할 두번째 시퀀스 또는 콜렉션
Return Value
튜플 쌍의 시퀀스. 여기서 각 쌍의 요소는 sequence1 및 sequence2의 해당 요소
2️⃣ 코드
- 크기가 같은 배열을 동시에 묶을 수 있기 때문에 동시에 해당 zip 시퀀스로 원소에 접근이 가능하다.
let words = ["one", "two", "three", "four"]
let numbers = 1...4
for (word, number) in zip(words, numbers) {
print("\(word): \(number)")
}
// Prints "one: 1"
// Prints "two: 2
// Prints "three: 3"
// Prints "four: 4"
// 두 시퀀스의 길이가 다를 경우에는 짧은 시퀀스의 길이로 통일됌.
let naturalNumbers = 1...Int.max
let zipped = Array(zip(words, naturalNumbers))
// zipped == [("one", 1), ("two", 2), ("three", 3), ("four", 4)]
- zip으로 내적 구하기
import Foundation
func solution(_ a:[Int], _ b:[Int]) -> Int {
return zip(a, b).map(*).reduce(0, +)
}