고차함수 map, compactMap, flatMap

Updated:

🔷 Map

  • 맵 고차함수를 통해 콜렉션의 요소를 변형 시킬수 있습니다
let friendsArray = ["철수", "영희", "수진", "제임스", "마크"]

// 매열 맵핑
let myFriends = friendsArray.map {
	"내친구: " + $0
}
print(myFriends) // ["내친구: 철수", "내친구: 영희", "내친구: 수진", "내친구: 제임스", "내친구: 마크"]


// Dictionary mapping
let myPetDicionary = [
	"고양이" : "야용",
	"강아지" : "멍멍",
	"송아지" : "음매"
]

let petMapping =
myPetDicionary.map{ (kind, sound) in
	return ("우리집: \(kind)", "울음소리: \(sound)")
}
print(petMapping) // [("우리집: 고양이", "울음소리: 야용"), ("우리집: 강아지", "울음소리: 멍멍"), ("우리집: 송아지", "울음소리: 음매")]

// Set mapping
let numberSet : Set<Int> = [1, 1, 2, 3, 4, 4, 5]

let setMapping = numberSet.map ({ (number: Int) -> Int in
	return number * 10
})
print("mapping set: \(setMapping)") // mapping set: [10, 30, 50, 20, 40]


// 축약 버전 (클로져 생략)
// 주로 생략해서 resultThree, resultFour 를 많이 사용함
let resultOne =
numberSet.map ({ (number: Int) in
	return number * 10
})

let resultTwo = numberSet.map({ (number: Int) in number * 10})

let resultThree = numberSet.map({$0 * 10})

let resultFour = numberSet.map{ $0 * 10}

🔷 compactMap

  • map 은 변경값으로 nil 도 들어가만, compactMap 을 사용하게 되면 변형시키는 값이 nil 이면 그 값을 제거 하고 return
var myArray = ["one", "2", "three", "4"]

// map 은 변경시키는 값으로 nil 도 넣을 수 있음
let intArray = myArray.map({ (item: String) in
	return Int(item)
})
print(intArray) // [nil, Optional(2), nil, Optional(4)]


// compactMap 메소드
let onlyIntArray = myArray.compactMap({ (item: String) in
	return Int(item)
})
print(onlyIntArray) // [2, 4]

🔷 flatMap

  • collection 안에 collection 이 들어 있는 현태 2차원
let myFriends = [["철스"], ["영희"], ["제임스", "본드"], ["스티브"], ["Jacob", "Ko"]]

// flatmap 을 통해 1차원적으로 만들어 줍니다
// 말그대로 flat : 평평하게 펴준다는 의미임
let flatMapped = myFriends.flatMap { (item:[String]) in
	return item
}

print(flatMapped) // ["철스", "영희", "제임스", "본드", "스티브", "Jacob", "Ko"]


Reference

Swift Tip of the day - 스위프트 기초 문법 - https://spangle-wedelia-2dc.notion.site/Swift-Tip-of-the-day-c428bfd990674bcfa2a4973e5d08c4eb

꼼꼼한 재은 씨의 스위프트 문법편 - https://book.jacobko.info/#/book/1186710233

Categories:

Updated:

Leave a comment