์ค๋์ ๊ณ ์ฐจํจ์ map๊ณผ compactMap, flatMap์ ๋ํด ์์๋ด ์๋ค!
๊ณ ์ฐจํจ์๋ ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋ฆฌํด๊ฐ์ผ๋ก ํจ์๋ฅผ ์ถ๋ ฅํ๋ ํจ์์ ๋๋ค.
ํด๋ก์ ๋ฅผ ์ฌ์ฉํ ํจ์๋ผ๋ ๋ป์ด๊ฒ ์ฃ ?!?
์ฐ์ map์ด ์ด๋ค ํจ์์ธ์ง์ ๋ํ ์ดํด๋ถํฐ ํด๋ด ์๋ค!
map
map
์ ํจ์์์ ๋ฐํ๋ ๊ฐ๋ค์ ๋ฐฐ์ด๋ก ๋ฆฌํดํด์ฃผ๋ ํจ์์
๋๋ค.
์๋ฅผ ๋ค์ด 1๋ถํฐ 10๊น์ง์ ์๋ฅผ ์ ๊ณฑํ ๊ฐ์ ๋ฐฐ์ด์ ์ ์ฅํ๋ค๊ณ ํด๋ด ์๋ค.
๊ณ ์ฐจํจ์๋ฅผ ์ฐ์ง ์๋๋ค๋ฉด,
var array = [Int]()
for i in 1...10 {
array.append(i*i)
}
print(array)
// ์ถ๋ ฅ: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
์ด๋ ๊ฒ ๊ตฌํํด์ผ๊ฒ ์ฃ ?!
์ด๋ฅผ ํ ๋ฌธ์ฅ์ผ๋ก ์ค์ฌ์ค ์ ์๋ ์น๊ตฌ๊ฐ ์ด map์ด๋ผ๋ ๊ณ ์ฐจํจ์์ ๋๋ค.
let arrayMap = (1...10).map{ $0 * $0 }
print(arrayMap)
// ์ถ๋ ฅ: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
map์ ํด๋ก์ ์์ ๋ฐํ๋ ์น๊ตฌ๋ค์ ์์์ ๋ฐฐ์ด๋ก ์ ์ธํ์ฌ ์ถ๋ ฅํด ์ค๋๋ค.
for๋ฌธ๋ณด๋ค map์ ์คํ ์๊ฐ์ด ๋ ๋น ๋ฅด๊ณ ์ฝ๋๋ฅผ ๋ณด๋ค ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์์ด์ ๋ง์ด ์ฌ์ฉ์ด ๋ผ์!
[ ์์ 1 ]
let alphabet = "abcdefghijklmnopqrstuvwxyz"
print(alphabet.map{ $0 })
// ์ถ๋ ฅ: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
[ ์์ 2 ]
var word = ["apple", "banana", "cinamon", "delmont", "element"]
print(word.enumerated().map{ String($0.offset)+$0.element })
// ์ถ๋ ฅ: ["0apple", "1banana", "2cinamon", "3delmont", "4element"]
[ ์์ 3 ]
var students = [ 1: "james", 2: "tim", 3:"john", 4:"brian"]
print(students.map{ $0.value })
// ์ถ๋ ฅ: ["john", "tim", "brian", "james"]
compactMap
compactMap
์ map๊ณผ ๋์ผํ ๊ธฐ๋ฅ์ ํ๋ ํจ์์ด์ง๋ง nil
์ ์ ์ธํ ์ถ๋ ฅ๊ฐ์ ๋ฐฐ์ด๋ก ์ ์ธํด ์ถ๋ ฅํด์.
์๋ฅผ ๋ค์ด, ๋ฌธ์์ด ๋ฐฐ์ด์ Int๋ก ๋ฐ๊พธ์ด์ ์ถ๋ ฅํ๋ ค๊ณ ํ ๊ฒฝ์ฐ
let isItNumArray = ["one", "2", "three", "///4///", "5!"]
print(isItNumArray.map{ Int($0) })
// ์ถ๋ ฅ: [nil, Optional(2), nil, nil, nil]
print(isItNumArray.compactMap{ Int($0) })
// ์ถ๋ ฅ: [2]
map
๊ณผ compactMap
์ ์ถ๋ ฅ์ด ๋ค๋ฅด๋ค๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. map
์ nil์ ์ถ๋ ฅํ๊ณ nil์ด ์๋๋ผ๋ฉด
unwrapping ๋์ง
์์ ์ต์
๋ ๊ฐ์ ์ถ๋ ฅํด์. ๊ทธ์ ๋ฐํด compactMap
์ nil๊ฐ์ ์ ๊ฑฐํ๋ฉฐ ์ต์
๋ ๋ฐ์ธ๋ฉ์ ํ์ฌ ์ถ๋ ฅํฉ๋๋ค. ๊ทธ๋์ compactMap์ ์ฌ์ฉํ๋ฉด ์ต์
๋๊ฐ๋ foced unwrapping ์ ํ์ง ์๊ณ unwrapping ํ ์ ์์ด์ ๋ ์์ ํ๊ฒ ๊ฐ์ ์ถ๋ ฅ๊ฐ๋ฅํ๊ฑฐ์ฃ .
flatMap
flatMap
์ ํจ์์์ ๋ฐํ๋ ๊ฐ๋ค์ ๋ฐฐ์ด๋ก ๋ฆฌํดํด์ฃผ์ง๋ง map
๊ณผ ๋ค๋ฅธ ์ ์ flattenํ๊ฒ ๋ง๋ค์ด์ฃผ๊ณ , compactMap
๊ณผ ๋์ผํ๊ฒ nil๊ฐ์ ์ ๊ฑฐํ๋ฉฐ ์ต์
๋ ๋ฐ์ธ๋ฉ์ ํด์ค๋๋ค.
์ฌ๊ธฐ์ flatten
์ด๋ผ๋ ๊ฒ์ 2์ฐจ์ ๋ฐฐ์ด์์ 1์ฐจ์ ๋ฐฐ์ด๋ก ํํํ๊ฒ ๋ง๋ค์ด์ค๋ค๋ ๊ฒ์ธ๋ฐ์. ์์ ์์๋ฅผ ๋ณด๋ฉด ์ดํด๊ฐ ๊ฐ ๊ฒ์
๋๋ค.
print( (0...5).map { Array(repeating: $0, count: $0) } )
// ์ถ๋ ฅ: [[], [1], [2, 2], [3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5, 5]]
print( (0...5).flatMap { Array(repeating: $0, count: $0) } )
// ์ถ๋ ฅ: [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
Q : flatMap
๊ณผ compactMap
์ ๋ ๋ค ์ต์
๋ ๋ฐ์ธ๋ฉ์ ํด์ฃผ๋ฉด์ nil ๊ฐ์ ์ ๊ฑฐํ๋ ์ญํ ์ ํ๋๋ฐ ๊ทธ๋ผ ์ธ์ flatMap
์ ์ฌ์ฉํ๊ณ ์ธ์ compactMap
์ ์ฌ์ฉํ ๊น์?
A : 2์ฐจ์ ๋ฐฐ์ด์์ 1์ฐจ์ ๋ฐฐ์ด๋ก flatten ํ๊ฒ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด flatMap
์ ์ฌ์ฉํ๊ณ , 2์ฐจ์ ๋ฐฐ์ด์ ์ ์งํ๊ณ ์ถ๋ค๋ฉด compactMap
์ ์ฌ์ฉํ๋ฉด ๋ผ์!
์ด๋ ๊ฒ ์ค๋ ํฌ์คํ ์ ๋ง์น๋๋ก ํ๊ฒ ์ต๋๋ค๐
๋ง์ฝ ๋ถ์กฑํ ์ ์ด ์๋ค๋ฉด ๋๊ธ๋ก ํผ๋๋ฐฑํด ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค๐ฉต
๐ ์ฐธ๊ณ ๋ธ๋ก๊ทธ 1 https://withthemilkyway.tistory.com/61
๐ ์ฐธ๊ณ ๋ธ๋ก๊ทธ 2 https://levenshtein.tistory.com/502#google_vignette