본문 바로가기

Swift

Swift - zip 함수

행렬의 덧셈 문제를 풀다가 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