티스토리 뷰
오늘은 유용하게 쓰이는 고차함수에 대해 알아볼게욧!
map(_:)
map함수는 기존의 배열, 딕셔너리 등을 매핑하여 새로운 배열로 리턴해주는 함수에여.
매핑 방식은 제가 정해주면 됩니다요.
제네릭형태(<T>)로 선언이 되어있기 때문에, 어떤 타입에 써도 상관이 없겠져?!
그럼 일단 한 번 예제를 볼까요?
아래와 같이 단순하게 1~5까지 있는 배열을 만들었어요.
let numbers = [1, 2, 3, 4, 5]
이 배열에 점을 찍고 map 메서드를 실행해보면?
위와 같이 transform이라는 파라미터를 받을 수 있는 클로저가 나온다리~
map의 정의에서는 제네릭 형태였지만, numbers라는 배열이 Int 형태기 때문에 placeholder 부분을 보면 (Int)로 바뀐 거 보이시져?
그럼 저는 numbers의 배열에서 요소를 하나씩 쏙쏙 뽑아서 어떻게 하면 될지를 클로저 형태로 전달하면 돼요.
배열의 요소가 num이라는 파라미터로 전달이 되기 때문에 받아온 num을 어떻게 매핑할지는 개발자가 정해주면 됩니당.
저는 간단하게 숫자의 자기소개를 해볼게요.
var a = numbers.map { num in
return "나는야 \(num)"
}
이렇게 하면 num으로 numbers의 배열 1, 2, 3, 4, 5가 전달되구요.
변수 a를 프린트 해보면?
print(a)
//["나는야 1", "나는야 2", "나는야 3", "나는야 4", "나는야 5"]
생각보다 간단하고 유용하쥬?
근데 클로저는 단축문법 사용도 가능하기 때문에, 단축해서 표현해보면 쨘!
이렇게 간단하게도 가능해여 ㅎㅎㅎㅎ 간편한게 최고야
var a = numbers.map({ "나는야 \($0)" })
아래는 apple 사이트에 있는 예제인데요.
이렇게 활용도 가능해여!
cast라는 배열이 있구요.
let cast = ["Vivien", "Marlon", "Kim", "Karl"]
이 배열을 map함수를 이용하여 전부 소문자로 만들어 볼 수도 있구요.
let lowercaseNames = cast.map { $0.lowercased() }
// 'lowercaseNames' == ["vivien", "marlon", "kim", "karl"]
※ lowercased()
String의 소문자 버전을 만들어주는 메서드
또 각 문자열의 요소들의 count를 세볼 수도 있겠쥬?
예를 들어 첫 번째 요소인 Vivien은 총 6개의 문자로 이루어져 있기 때문에 6이 나올 수 있답니다.
let letterCounts = cast.map { $0.count }
// 'letterCounts' == [6, 6, 3, 4]
보기에는 엄~청 유용해보이는데 말이져?!
실제로 쓰려고 할 때는 이해가 잘 안가는 그런 넉힘,,,ㅎ,,
앞으로 배울 때마다 여기에 업데이트 하겠어여
자유자재로 쓰는 그 날까지 나 샛기 달려,,,
잘못된 점은 언제나 지적해주십셔 슨배님들!
'swift' 카테고리의 다른 글
[swift] Singleton 알아보기 (0) | 2022.03.14 |
---|---|
[swift] Result Type 알아보기 (0) | 2022.02.03 |
[swift] CaseIterable protocol (0) | 2021.12.11 |
[swift] Collection Type - Dictionary (0) | 2021.12.08 |
[swift] Collection Type - Array (0) | 2021.12.08 |
- Total
- Today
- Yesterday