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
➰해결코드
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(_:_:)
그 외 여러 구글링 자료들
'Swift' 카테고리의 다른 글
[Swift] 상속 (0) | 2022.08.02 |
---|---|
[Swift] 백준 : 10814 (구조체) (0) | 2022.08.02 |
[Swift] 모나드 : 컨텍스트, 함수객체, 모나드 (0) | 2022.03.24 |
[Swift] 맵, 필터, 리듀스 (0) | 2022.03.22 |
[Swift] 옵셔널 체이닝과 빠른 종료 (guard, assert) (0) | 2022.03.20 |