Old_SWIFT(221012)/함수이야기

<zip> 함수

KataRN 2021. 11. 8. 15:08
반응형

안녕하세요, KataRN입니다.

 

오늘은 zip에 대해 알아보겠습니다.

 

오늘도 열심히 알고리즘을 풀고있는데 배열 2개를 어떻게 요리를 못할까 하다가 알게된 함수입니다.

func zip<Sequence1, Sequence2>(_ sequence1: Sequence1, _ sequence2: Sequence2)
-> Zip2Sequence<Sequence1, Sequence2> where Sequence1 : Sequence, Sequence2 : Sequence

 

보시는 바와 같이 zip를 사용하기 위해서는 2개의 배열이 필요합니다.(많아도 적어도 안됩니다.)

 

예제로 설명 드리겠습니다.

let aArr = [1,2,3,4,5]
let bArr = ["a","b","c","d","e"]

let zipArr = zip(aArr,bArr)

print(zipArr)

 

위 처럼 print를 하였더니....

Zip2Sequence<Array<Int>, Array<String>>(_sequence1: [1, 2, 3, 4, 5], _sequence2: ["a", "b", "c", "d", "e"])

 

 

????? 뭔말인지 모르겠더라구요...

 

그래서 더 쉬운 예제를 준비해봤습니다.

let aArr = [1,2,3,4,5]
let bArr = ["a","b","c","d","e"]

let zipArr = zip(aArr,bArr)

for (i,j) in zipArr {
    print("\(i)번 \(j)")
}

이렇게 사용하면 아래처럼 뱉습니다ㅎㅎ

1 a

2 b

3 c

4 d

5 e

 

이걸 어따쓰냐구요?....

그래서 쓸만한 예제도 준비했습니다^^

 

Q1. aArr 배열과 bArr 배열을 같은 인덱스 끼리 곱해서 더한값은 얼마인가요? 라는 문제가 있습니다.

let aArr = [1, 2, 3, 4, 5]
let bArr = [6, 7, 8, 9, 10]

 

어떻게 푸시겠습니까? 응용해서 풀어보도록 하죠. 후훗

let aArr = [1, 2, 3, 4, 5]
let bArr = [6, 7, 8, 9, 10]
let zipArr = zip(aArr,bArr)

var sum = 0

for (i,j) in zipArr {
    sum += (i * j)
}

print(sum)

이렇게 쓸거면 왜쓰냐구요?....

그렇죠.. 저라면 이렇게 쓸겁니다.

let aArr = [1, 2, 3, 4, 5]
let bArr = [6, 7, 8, 9, 10]
let zipArr = zip(aArr,bArr)

print(zipArr.map{$0 * $1}.reduce(0, +))

이제 쓸맘이 생기셨나요? 

 

 

짧은 내용을 쓸데없이 길게 써봤습니다.

 

긴글 읽어주셔서 감사합니다.

반응형