알고리즘 문제를 풀다가 다른사람들이 푼 답들을 보면 for 문 대신 map, reduce, filter 등을 쓰는것을 보았다.궁금해서 찾아 보았지만 클로저, 함수 등 기본적인 개념을 알아야 잘 쓸수 있을거 같았다. 그래서 클로저와 함수를 간단히 훑고 나서 지금에서야 글을 쓴다.
map 기본 형태
array.map(transform: T throws -> T)
이 코드는 Swift 언어에서 사용하는 형태의 코드로 보입니다. 이 코드는 배열(array)의 각 요소에 대해 주어진 변환(transform) 클로저를 실행하고, 그 변환 결과를 새로운 배열로 반환하는 메소드입니다. 여기서 `map` 메소드는 배열의 각 요소에 대해 변환을 적용하는 함수입니다. 이 때 `transform`은 배열의 요소를 인자로 받아 변환을 수행하는 클로저입니다. 클로저는 주어진 타입 T를 입력으로 받아 동일한 타입 T를 반환해야 합니다. 여기서 T는 배열의 요소들의 타입을 나타냅니다. (챗 GPT 검색)
map 함수는 배열의 요소를 변환하여 새로운 배열을 생성하는 것이다.
처음에 이해가 잘 안가서 챗 GPT 에 검색을 해 보았더니 잘 설명해 주었다.
즉 클로저를 실행하고, map 함수를 실행한 배열의 타입과 리턴받는 배열의 타입이 같아야 한다는거 같다.
map 사용 예시
let arr1: [Int] = [1, 2, 3, 4, 5]
var arr2: [Int] = []
for num in arr1 {
arr2.append(num*3)
}
print(arr2) //[3, 6, 9, 12, 15]
for 문을 사용하여 배열의 있는 값들을 곱하기 3 해주는 코드
이것을 map 함수를 사용하면
let arr1: [Int] = [1, 2, 3, 4, 5]
var arr2 = arr1.map{ $0*3 }
/*
$0 는 배열의 각 요소에 해당한다. 위에 있는 for문으로 치면 num 에 해당
요소들을 곱하기 3을 해서 새로운 배열을 만든다 라는 정도로 이해 하면 될거 같다.
*/
print(arr2) //[3, 6, 9, 12, 15]
이렇게 간단하게 줄일수 있다.
저렇게 쓰는것도 축약해서 사용한것인데 좀더 자세히 적자면
let arr1: [Int] = [1, 2, 3, 4, 5]
var arr2 = arr1.map({ (num: Int) -> Int in
return num*3
})
/*이렇게 된것을 축약한 것인데 함수에 파라미터가 클로저 하나일 경우 ()를 생략 할수 있다.*/
arr1.map{ (num: Int) -> Int in
return num*3
} //()생략
/*파라미터와 리턴 형식도 생략할수 있다.*/
arr1.map{ (num) in
return num*3
} //파라미터, 리턴 형식 생략
/*파라미터를 인자 이름 축약(Shorthand Arguments Names)을 통하여
$0표시를 통해 간단하게 표현할수 있다.*/
arr1.map{
return $0*3
} //파라미터와 in 을 생략해도 된다.
/*마지막으로 리턴문만 남았을 경우 그것마저 생략할수 있다.*/
arr1.map{ $0*3 } //map 함수의 가장 간단한 형태
클로저 게시물에는 없는 내용이지만 map 함수를 예시로 삼아 클로저의 축약표현을 설명하면 좋을거 같아서 이 게시물에 작성했다. 추후 클로저 게시물에도 작성할 예정
참고: https://babbab2.tistory.com/82 (개발자 소들이님 블로그)
'Swift' 카테고리의 다른 글
Swift) Protocol 프로토콜 (0) | 2024.06.01 |
---|---|
Swift)고차함수 filter (0) | 2024.05.10 |
Swift) 클로저 Closure (0) | 2024.05.09 |
Swift) 함수 Function (0) | 2024.05.03 |
Swift) 기본 연산자 (2) | 2024.05.01 |