๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ Today I Learned/Swift ๋ฌธ๋ฒ•

[Swift] ๊ณ ์ฐจํ•จ์ˆ˜ (map, filter, reduce)

by Joseph Seong 2023. 12. 12.

 

 

 

๊ณ ์ฐจํ•จ์ˆ˜

 

map ํ•จ์ˆ˜

 

  • map ํ•จ์ˆ˜๋Š” ์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€์˜ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ˜•(transform)ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ปฌ๋ ‰์…˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ๊ธฐ์กด์˜ ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ์— ๋Œ€ํ•ด ์ •์˜ํ•œ ์ต๋ช…ํ•จ์ˆ˜๋กœ ๋งคํ•‘ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
// for ๋ฌธ์œผ๋กœ ๊ตฌํ˜„
let num = ["1", "2", "3", "4", "5"]
var numberArray: [Int] = []
for index in num {		// num์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค์„œ ๊ฐ๊ฐ์˜ ์š”์†Œ๋ฅผ index๋ผ๋Š” ๋ณ€์ˆ˜์— ๋„ฃ์–ด์คŒ
    if let changeToInt = Int(index) {
        numberArray.append(changeToInt)
    }
}

print(numberArray)
// [1, 2, 3, 4, 5]

// map์œผ๋กœ ๊ตฌํ˜„
let stringArray = ["1", "2", "3", "4", "5"]
numberArray = stringArray.map { 
		if let changeToInt = Int($0) { // $0 ์ด๋ฉด ๊ฐ๊ฐ ํ•˜๋‚˜์”ฉ ๋“ค์–ด์˜ด
				return changeToInt
		}
		return 0
}

/*
$0์™€ $1
{ } ๋ฅผ ์ต๋ช…ํ•จ์ˆ˜์ธ ํด๋กœ์ €๋ผ๊ณ  ํ•œ๋‹ค.
ํด๋กœ์ €์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‹จ์ถ• ์ธ์ž ์ด๋ฆ„์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.($0, $1)
๋‹จ์ถ• ์ธ์ž์ด๋ฆ„์€ ์ˆœ์„œ๋Œ€๋กœ $0 , $1 , $2, $3 ...์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค. (์ด๋ ‡๊ฒŒ ์“ฐ๋Š” ๊ฒƒ๋ณด๋‹ค ์ง์ ‘ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์“ฐ๊ณ  in ํ‚ค์›Œ๋“œ๋ฅผ ์“ฐ๋Š”๊ฒŒ ๊ฐ€๋…์„ฑ์ด ์ข‹๋‹ค)
$0 ์€ ์ฒซ๋ฒˆ์งธ ์ธ์ž, $1์€ ๋‘๋ฒˆ์งธ ์ธ์ž๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค.
*/

print(numberArray)
// [1, 2, 3, 4, 5]

 

 

filter ํ•จ์ˆ˜

 

  • ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ์˜ ์š”์†Œ ์ค‘ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ๊ฐ’์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.
// for ๋ฌธ์œผ๋กœ ๊ตฌํ˜„
// numbers์—์„œ ์ง์ˆ˜๋งŒ ์ถ”์ถœํ•˜๊ธฐ

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var evenNumbers: [Int] = []

for number in numbers {
    if number % 2 == 0 {
        evenNumbers.append(number) // number๋ฅผ evenNumbers์— ๋‹ด์•„์ฃผ๋ฉด ๋œ๋‹ค.
    }
}

print(evenNumbers)
// [2, 4, 6, 8]

// filter๋กœ ๊ตฌํ˜„
// numbers์—์„œ ์ง์ˆ˜๋งŒ ์ถ”์ถœํ•˜๊ธฐ

let numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
let evenNumbers2 = numbers1.filter { $0 % 2 == 0 }

print(evenNumbers2)
// [2, 4, 6, 8]

 

 

reduce ํ•จ์ˆ˜

 

  • ๊ธฐ์กด์˜ ์ปจํ…Œ์ด๋„ˆ์˜ ์š”์†Œ์— ๋Œ€ํ•ด ์ •์˜ํ•œ ํด๋กœ์ €๋กœ ๋งคํ•‘ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
// for ๋ฌธ์œผ๋กœ ๊ตฌํ˜„
// ๊ฐ ์š”์†Œ์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ

let numbers2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var sum = 0	// ์ดˆ๊ธฐ๊ฐ’์„ 0์œผ๋กœ ์„ค์ •

for number in numbers2 {
    sum += number
}

print(sum)
// 55


// reduce๋กœ ๊ตฌํ˜„
// ํ‘œํ˜„์‹1
// ๊ฐ ์š”์†Œ์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ

let numbers3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sum1 = numbers3.reduce(0, +)

print(sum1)
// 55


//ํ‘œํ˜„์‹2
// ๊ฐ ์š”์†Œ์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ

let numbers4 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sum2 = numbers4.reduce(0) { $0 + $1 }	// ์ฒ˜์Œ์— $0์—๋Š” ์ดˆ๊ธฐ๊ฐ’ 0, $1์—๋Š” 1 ๊ทธ๋ž˜์„œ ๋‘๊ฐœ ๊ฐ’ ๋”ํ•˜๋ฉด 1์ด๋‹ค. ๊ทธ 1์ด reduce()์ž๋ฆฌ์— ๋“ค์–ด๊ฐ€๊ณ  ๋ฐ˜๋ณตํ•œ๋‹ค. 

print(sum2)
// 55