์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[ Swift ๊ธฐ์ดˆ ๋ฌธ๋ฒ• ] ๊ณ ์ฐจํ•จ์ˆ˜ - map, filter, reduce, forEach, compactMap, flatMap

๐ŸŽ iOS/Swift

by AHN.Jihyeon 2024. 6. 26. 02:19

๋ณธ๋ฌธ

 


๊ณ ์ฐจํ•จ์ˆ˜(Higher-order-Function)๋ž€?

ํ•จ์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ํ•จ์ˆ˜์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ•จ์ˆ˜๋กœ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜

์ฆ‰, ์ธํ’‹์ด ํ•จ์ˆ˜์ด๊ฑฐ๋‚˜, ์•„์›ƒํ’‹์ด ํ•จ์ˆ˜์ธ ํ•จ์ˆ˜

 

 

๐Ÿ”Ž  1 . map ํ•จ์ˆ˜


๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋“ค์„ ํ•˜๋‚˜ ํ•˜๋‚˜ ๊บผ๋‚ด์„œ ์ƒˆ๋กญ๊ฒŒ ๋ณ€ํ˜•(ํด๋กœ์ €์—์„œ)ํ•ด ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ

 

let numbers = [1, 2, 3]

//Int -> String
var array = numbers.map { paramNum in  //paramNum์˜ ํƒ€์ž…์€ Int
    return "\(paramNum)"
}

//์ถ•์•ฝ ํ‘œํ˜„
var array = numbers.map { "\($0)" }

print(array) //์ถœ๋ ฅ: ["1", "2", "3"]

 

 

 

 

 

 

๐Ÿ”Ž  2. filter ํ•จ์ˆ˜ 


๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์— ๋Œ€ํ•ด ํ•ด๋‹น ์กฐ๊ฑด(ํด๋กœ์ €์—์„œ ๊ตฌํ˜„)์— ํ•ด๋‹น(true)ํ•˜๋Š” ์š”์†Œ๋“ค์„ ๊ฑธ๋Ÿฌ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ

let numbers = [1, 2, 3, 4]

//์ง์ˆ˜์ธ ๋ฐฐ์—ด ๊ตฌํ•˜๊ธฐ
var array = numbers.filter{$0 % 2 == 0}
print(array) //์ถœ๋ ฅ: [2, 4]



//filter๋ฅผ ์ค‘๋ณตํ•ด์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
var array = numbers.filter{$0 % 2 == 0}.filter{$0 < 4}
print(array) //์ถœ๋ ฅ: [2]

 

 

 

 

 

 

๐Ÿ”Ž  3. reduce ํ•จ์ˆ˜ 


๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋“ค์„ ํด๋กœ์ €๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฒฐํ•ฉํ•ด ํ•˜๋‚˜์˜ ๋งˆ์ง€๋ง‰ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฆฌํ„ด

let numbers = [1, 2, 3, 4, 5]

//0์€ ์ดˆ๊ธฐ๊ฐ’, 0์ด a์— ๋“ค์–ด๊ฐ€๊ณ  ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ b์— ๋“ค์–ด๊ฐ€๊ณ  ๋ˆ„์ 
var newNum = numbers.reduce(0) { a, b in
    return a + b
}


//$0์€ ํ˜„์žฌ๊นŒ์ง€์˜ ๋ˆ„์  ํ•ฉ๊ณ„, $1์€ ๋ฐฐ์—ด์˜ ํ˜„์žฌ์š”์†Œ
var newNum = numbers.reduce(0) { $0 + $1 }


//์ถ”๊ฐ€ ์ถ•์•ฝ ์ฝ”๋“œ
var newNum = numbers.reduce(0, +)

 

 

 

 

 

๐Ÿ”Ž  4. forEach ํ•จ์ˆ˜ 


 

 

 

 

 

 

 

๐Ÿ”Ž  5. compactMap ํ•จ์ˆ˜ 


 

 

 

 

 

 

 

๐Ÿ”Ž  6. flatMap ํ•จ์ˆ˜ 


 

 

 

 

 

๐Ÿ”— Reference 


 

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ