행렬의 덧셈 문제를 풀다가 zip함수를 알게되어 zip함수에 대해 정리해보려 합니다.
기본적으로 zip함수는
Creates a sequence of pairs built out of two underlying sequences.
두 개의 기본 시퀀스로 구성된 일련의 쌍을 생성합니다.
라고 설명되어있는데
시퀀스 2개를 파라미터로 받아 Zip2Squence를 반환해준다
Zip2Squence가 두 개의 기본 시퀀스로 구성된 쌍이다
시퀀스 2개를 zip한다고 Zip2Sequence인가??? ..
예제를 보게되면 두 개의 시퀀스를 순서대로 tuple 쌍으로 리턴해준다.
만약 두개의 시퀀스가 길이가 다르면 작은 값이 맞춰서 튜플 쌍이 만들어진다.
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)]
이것을 행렬의 합에 적용해보면
만약
[[1, 2], [3, 4]]
[[5, 6], [7, 8]]
이렇게 두 개의 행렬이 있다면
zip함수를 한번 돌려주면
([1, 2], [5, 6]), ([3, 4], [7, 8]) 쌍이 만들어지고
한번 더 돌리게 되면
([1, 5], [2, 6]), ([3, 7], [4, 8])
코드로 보게되면
zip(arr1, arr2).map { $0 }
//[([1, 2], [5, 6]), ([3, 4], [7, 8])]
zip(arr1, arr2).map { zip($0, $1).map { $0 }}
//[[(1, 5), (2, 6)], [(3, 7), (4, 8)]]
zip(arr1, arr2).map { zip($0, $1).map { $0 + 1 }}
//[[6, 8], [10, 12]]
A sequence of pairs built out of two underlying sequences.
'Swift' 카테고리의 다른 글
Swift - UIPageViewController (0) | 2021.06.03 |
---|---|
Swift - 그라데이션 (0) | 2021.02.23 |
Swift 제곱근 (0) | 2021.01.18 |
에라토스테네스의 체와 Stride() (0) | 2021.01.15 |
Swift - 진법 계산 (0) | 2021.01.13 |