iOS/Swift

[ Swift ] κ³ μ°¨ν•¨μˆ˜ κ°„λ‹¨ν•˜κ²Œ 정리해보기 ( Map, Filter, Reduce )

κ²½ν‘Έ 2022. 6. 22. 21:22
λ°˜μ‘ν˜•

μ•ˆλ…•ν•˜μ„Έμš”~

 

μ˜€λŠ˜μ€ κ³ μ°¨ν•¨μˆ˜μ— λŒ€ν•΄μ„œ 정리해보렀고 ν•©λ‹ˆλ‹€ : )

 

κ³ μ°¨ν•¨μˆ˜

κ³ μ°¨ ν•¨μˆ˜λŠ” λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό 인자둜 λ°›κ±°λ‚˜ ν•¨μˆ˜ μ‹€ν–‰μ˜ κ²°κ³Όλ₯Ό ν•¨μˆ˜λ‘œ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§ν•©λ‹ˆλ‹€.

Swift의 ν΄λ‘œμ €λŠ” 일급 객체이기 λ•Œλ¬Έμ— ν•¨μˆ˜μ˜ 전달 μΈμžλ‘œλ„ 전달이 κ°€λŠ₯ν•˜λ©°

κ²°κ΄κ°’μœΌλ‘œ λ°˜ν™˜μ΄ λ‹Ήμ—°νžˆ κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

μ’…λ₯˜

map, filter, reduce, forEach, compactMap, flatMap 등이 μžˆμŠ΅λ‹ˆλ‹€

 

κ°€μž₯ 많이 μ‚¬μš©λ˜κ³  μžˆλŠ” κ³ μ°¨ ν•¨μˆ˜ 3가지

1. Map

Returns an array containing the results of mapping the given closure over the sequence’s elements.
기쑴의 μ»¨ν…Œμ΄λ„ˆμ˜ μš”μ†Œμ— λŒ€ν•΄ μ •μ˜ν•œ ν΄λ‘œμ €λ‘œ λ§€ν•‘ν•œ κ²°κ³Όλ₯Ό μƒˆλ‘œμš΄ μ»¨ν…Œμ΄λ„ˆλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€.

ν•¨μˆ˜ μ›ν˜•

func map<T>(_ transform: (Element) throws -> T) rethrows -> [T] 
// μ»¨ν…Œμ΄λ„ˆμ˜ λ³€ν™˜λœ μš”μ†Œλ₯Ό ν¬ν•¨ν•˜λŠ” 배열을 λ°˜ν™˜

μ˜ˆμ‹œ

// String 배열을 Int λ°°μ—΄λ‘œ λ³€ν™˜ν•΄λ³΄μž.
let strings: [String] = ["1", "2", "3", "4", "5"]
let numbers: [Int] = strings.map { Int($0)! }

numbers // [1,2,3,4,5]

// Int 배열을 연산이후 λ°°μ—΄λ‘œ λ³€ν™˜ν•΄λ³΄μž. 
let numbers: [Int] = [1,2,3,4,5]
let multipledNumbers: [Int] = numbers.map{ $0 * 5 } 

multipledNumbers // [5, 10, 15, 20, 25]

μ„€λͺ…

Map은 기쑴의 μ»¨ν…Œμ΄λ„ˆμ˜ μš”μ†Œλ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ μ •μ˜ν•œ ν΄λ‘œμ €μ˜ μ—°μ‚°λŒ€λ‘œ

ν˜•νƒœμ— 맞게 λ°˜ν™˜λœ 값듀을 λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ—

반볡문 for, while λ“± 보닀 κ°„κ²°ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

 

2. Filter

Returns an array containing, in order, the elements of the sequence that satisfy the given predicate.
κΈ°μ‘΄ μ»¨ν…Œμ΄λ„ˆμ˜ μš”μ†Œμ— λŒ€ν•΄ 쑰건에 λ§Œμ‘±ν•˜λŠ” 값에 λŒ€ν•΄μ„œ μƒˆλ‘œμš΄ μ»¨ν…Œμ΄λ„ˆλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€.

ν•¨μˆ˜ μ›ν˜•

func filter(_ isIncluded: (Self.Element) throws -> Bool) rethrows -> [Self.Element]

μ˜ˆμ‹œ

// Int λ°°μ—΄μ—μ„œ 짝수만 ν•„ν„°λ§ν•΄λ³΄μž.
let numbers = [1,2,3,4,5]
let evens = number.filter{ $0 % 2 == 0 }

evens // [ 2, 4 ]

μ„€λͺ…

FilterλŠ” 기쑴의 μ»¨ν…Œμ΄λ„ˆμ˜ μš”μ†Œμ—μ„œ 쑰건을 μΆ©μ‘±ν•˜λŠ” 값듀에 λŒ€ν•΄

μƒˆλ‘œμš΄ μ»¨ν…Œμ΄λ„ˆλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ μ›ν•˜λŠ” 데이터λ₯Ό μΆ”μΆœν•  λ•Œ νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 있게 λ©λ‹ˆλ‹€.

 

3. Reduce 

Returns the result of combining the elements of the sequence using the given closure.
μ •μ˜ν•œ ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•˜μ—¬ κΈ°μ‘΄ μ»¨ν…Œμ΄λ„ˆμ˜ μš”μ†Œλ₯Ό κ²°ν•©ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ„ μ–Έ

func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result

μ˜ˆμ‹œ

// Int λ°°μ—΄μ˜ 합을 κ΅¬ν•΄λ³΄μž.
let numbers = [1,2,3,4,5]
var sumNumbers: Int = numbers.reduce(0, +) 
// (μ΄ˆκΈ°κ°’, 결합에 μ‚¬μš©ν•  ν΄λ‘œμ €) , [+, -, *, / λ“± ] 

sumNumbers // 10

μ„€λͺ…

ReduceλŠ” 기쑴의 μ»¨ν…Œμ΄λ„ˆμ˜ μš”μ†Œλ₯Ό

νŠΉμ •ν•œ ν΄λ‘œμ €( μ—°μ‚° λ“±)λ₯Ό 톡해

κ²°ν•©ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” κ³ μ°¨ν•¨μˆ˜μž…λ‹ˆλ‹€.

 

 

κ³ μ°¨ν•¨μˆ˜μ— λŒ€ν•΄μ„œ κ°„λž΅ν•˜κ²Œ μ•Œμ•„λ΄€μŠ΅λ‹ˆλ‹€ : )

λ‹€λ₯Έ κ³ μ°¨ν•¨μˆ˜μ— λŒ€ν•΄μ„œ 정리할 κΈ°νšŒκ°€ 생기면

이 ν¬μŠ€νŒ…μ— μΆ”κ°€ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€~

 

그럼 이만 πŸ‘‹πŸ» πŸ‘‹πŸ» πŸ‘‹πŸ»

λ°˜μ‘ν˜•