[Swift] map 함수 정리하기
오늘은 프로그래머스에서 코테를 풀다가 자주 사용되는 Map함수에 대해 정리해보려고 한다.
제대로 개념 정리를 한번 하고 사용하는게 더 효율적으로 사용할 수 있을 거 같다!
map?
apple 공식문서에는 시퀀스 요소나 컬렉션의 각 요소에 지정된 클로저를 매핑한 결과가 포함된 배열을 반환한다고 정의되어 있다.
map() 함수는 배열, 집합, 딕셔너리와 같이 다양한 컬렉션 타입에 사용될 수 있으며 각 요소를 반환하는데 사용된다.
사용 방법
func map<T>(_ transform: (Self.Element) throws -> T) rethrows -> [T]
apple 공식문서에는 이렇게 설명되어 있다.
transform은 매개변수를 의미하는데 친절하게 설명은 되있지만 스위프트를 시작한 지 얼마 안됐을 때 이게 뭐야 ..? 라고 느꼈다 . .
풀어서 설명하자면 map()함수를 사용할 때 클로저로 파라미터를 받아야 한다.
받은 클로저는 요소를 새로운 값으로 변환한 결과를 반환한다.
예를 들면 문자열을 입력받아 배열에 배열에 넣는 새로운 변수를 만들거나, 문자열 배열을 정수 배열로 바꾸고 싶을때 사용한다.
기존 데이터를 기반으로 새로운 형태의 데이터를 생성할 때 유용하게 쓰인다.
let ex = ["1", "2", "3"]
var arr = ex.map {Int($0)}
print(arr)
//[1,2,3]
//Int 타입의 배열 출력
위의 예제는 문자열 형태로 된 숫자들을 정수형 형태 배열로 다시 매핑하여 반환해준 예제이다.
예제를 보면 위의 내용을 더 쉽게 이해할 수 있을 것이다.
CompactMap
apple 공식문서에서는 시퀀스에 각 요소에 대해 주어진 변환 함수를 적용하고 반환된 결과중에
nil 값이 아닌 배열을 반환한다고 정의되어있다.
map()과 기능이 유사하지만 compactMap()은 결과에서 nil 값을 자동으로 제거한다는 특징이 있다.
사용 방법은 map() 과 일치하다
let strings = ["1", "2", "three", "4", "5"]
let numbers = strings.compactMap { Int($0) }
print(numbers) // 출력: [1, 2, 4, 5]
nil값이 아닌 것만 반환해서 출력되는 것을 예시 코드로 확인할 수 있다.
이렇게 차이를 비교해보니 앞으로 compactMap을 자주 사용할 거 같다!!!