Swift

[Swift] zip(_:_:)

yevdev 2022. 7. 27. 23:15

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"

 

 

배열의 짝을 맞추는 데에 사용될 수 있음

 

예를 들어 

arr1 = [[3, 4], [5, 6]]
arr2 = [[3, 4], [5, 6]]
arr3 = [[6, 8], [10, 12]]

이렇게 arr1, arr2의 각 원소를 더해 arr3를 만들어보자

 

import Foundation

var arr1 = [[Int]]()
var arr2 = [[Int]]()

arr1 = [[3,4],[5,6]]
arr2 = [[3,4],[5,6]]

func solution(_ arrA:[[Int]], _ arrB:[[Int]]) -> [[Int]] {
    return zip(arrA, arrB).map{ zip($0, $1).map{$0+$1} }
}

print(solution(arr1, arr2))
 
 
 // [[6, 8], [10, 12]]

 

arrA와 arrB의 시퀀스의 짝을 맞춰주고, map 함수를 이용해서 또 각 원소를 zip으로 짝짓고 더하여 만들어낸다! (아니 왤케 설명하기 어렵지..)

 

 

 


 

➰관련 백준문제

https://www.acmicpc.net/problem/2738

 

2738번: 행렬 덧셈

첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같

www.acmicpc.net

➰해결코드

import Foundation

let inputs = readLine()!.split(separator: " ").map{ Int(String($0))! }

let n = inputs[0]
let m = inputs[1]

var arr1 = [[Int]]()
var arr2 = [[Int]]()

for _ in stride(from: 0, to: n, by: 1) {
    arr1.append(readLine()!.split(separator: " ").map { Int(String($0))! })
}

for _ in stride(from:0, to: n, by: 1) {
    arr2.append(readLine()!.split(separator: " ").map { Int(String($0))! })
}

func solution(_ arrA:[[Int]], _ arrB:[[Int]]) -> [[Int]] {
    return zip(arrA, arrB).map{zip($0, $1).map{$0+$1}}
}

var resultArr = [[Int]]()
resultArr = solution(arr1, arr2)

for i in 0...n-1{
    for j in 0...m-1{
        print(resultArr[i][j], terminator: " ")
    }
    print()
}

 

 


Reference

https://developer.apple.com/documentation/swift/zip(_:_:) 

 

Apple Developer Documentation

 

developer.apple.com

그 외 여러 구글링 자료들