๐ŸŽ iOS/Swift

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

TechYeon 2023. 4. 10. 21:00

๊ณ ์ฐจํ•จ์ˆ˜?

ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•จ์ˆ˜(ํด๋กœ์ €)๋ฅผ ์ธ์ž ๋กœ ๋ฐ›๊ฑฐ๋‚˜, ํ•จ์ˆ˜(ํด๋กœ์ €)๋ฅผ ๋ฐ˜ํ™˜ ํ•˜๋Š” ํ•จ์ˆ˜๋กœ

๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ ์ž์›์ธก์—์„œ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ, ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ณ  ๋ณต์žกํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ€๋…์„ฑ์„ ์˜ฌ๋ฆฌ๊ณ  ํŽธ๋ฆฌ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ.

 

๊ทธ ์ค‘, ๋ฐฐ์—ด ๋‹ค๋ฃฐ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์„ธ ๊ฐ€์ง€ map, filter, reduce์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž


๐Ÿ”ฅ map

: ๊ธฐ์กด ๋ฐ์ดํ„ฐ ๋ณ€ํ˜•ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ

์ปฌ๋ ‰์…˜ ํƒ€์ž…์„ ์ˆœํšŒ(for๋ฌธ ์‚ฌ์šฉ)ํ•  ํ•„์š” ์—†์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅ!

// Declaration
func map<U>(transform: (T) -> U) -> Array<U>

 

[๊ฐ„๋‹จ ์‚ฌ์šฉ์˜ˆ์ œ] ๋ฐฐ์—ด ์›์†Œ ๋ฐ์ดํ„ฐ ํ˜•๋ณ€ํ™˜ํ•˜๊ธฐ

var string = ["1","2","3","4"]
string.map { Int($0)! } // [1,2,3,4] ๊ฐ ์›์†Œ๋ฅผ ์ „๋ถ€ Int๋กœ ๋งตํ•‘

 

 

[๋ฌธ์ œ] - ๋ฐฐ์—ด์ž๋ฅด๊ธฐ

์ •์ˆ˜ ๋ฐฐ์—ด numbers์™€ ์ •์ˆ˜ num1, num2๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, numbers์˜ num1๋ฒˆ ์งธ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ num2๋ฒˆ์งธ ์ธ๋ฑ์Šค๊นŒ์ง€ ์ž๋ฅธ ์ •์ˆ˜ ๋ฐฐ์—ด์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด๋ณด์„ธ์š”.

 

[for๋ฌธ ์‚ฌ์šฉ]

func solution(_ numbers:[Int], _ num1:Int, _ num2:Int) -> [Int] {
	var newArr: [Int] = []
	for i in (num1...num2){
		newArr.append(numbers[i])
	}
	return newArr
}

[map ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ]

func solution(_ numbers:[Int], _ num1:Int, _ num2:Int) -> [Int] {
    return (num1...num2).map{numbers[$0]}
}

ํด๋กœ์ € ์ถ•์•ฝ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ํ›จ~์”ฌ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฝ”๋“œ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅ


๐Ÿ”ฅ filter

: ๊ธฐ์กด ๊ฐ’๋“ค ์ค‘ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ๊ฐ’์„ ์ถ”์ถœํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐ˜ํ™˜, ์š”์†Œ๊ฐ€ ๋ฐ˜ํ™˜๋œ ๋ฐฐ์—ด์— ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ Bool ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํด๋กœ์ €

// Declaration
func filter(includeElement: (T) -> Bool) -> Array<T>

 

[๊ฐ„๋‹จ ์‚ฌ์šฉ์˜ˆ์ œ]

var array = [1,2,3,4]
array.filter { $0 % 2 == 0 } // [2,4] ์กฐ๊ฑด์— ๋งž๋Š” ์ˆ˜๋งŒ ๋ฝ‘์•„๋ƒ„

 

 

[๋ฌธ์ œ] - ํŠน์ • ๋ฌธ์ž ์ œ๊ฑฐํ•˜๊ธฐ

๋ฌธ์ž์—ด my_string๊ณผ ๋ฌธ์ž letter์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. my_string์—์„œ letter๋ฅผ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด์„ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

[for๋ฌธ ์‚ฌ์šฉ]

func solution(_ my_string:String, _ letter:String) -> String {
	var my_array = Array(my_string)
	var new_array: [Character] = []
        
	for char in my_array{
		if char != Character(letter){
			new_array.append(char)
		}
	}
	return String(new_array)
}

[filter ์‚ฌ์šฉ]

func solution(_ my_string:String, _ letter:String) -> String {
	return my_string.filter{String($0) != letter}
}

๐Ÿ”ฅ reduce

: ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋‚ด๋ถ€์˜ ๊ฐ’๋“ค์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋งŒ๋“ ๋‹ค.

๋ฐฐ์—ด์˜ ๊ฐ ํ•ญ๋ชฉ๋“ค์„ ์žฌ๊ท€์ ์œผ๋กœ ํด๋กœ์ €๋ฅผ ์ ์šฉ์‹œ์ผœ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋งŒ๋“ฌ.

func reduce<U>(initial: U, combine: (U, T) -> U) -> U

[๊ฐ„๋‹จ ์‚ฌ์šฉ์˜ˆ์ œ]

var array = [1,2,3,4]
array.reduce(0, +) // ์ˆซ์ž ํ•ฉ์ด ๋‚˜ํƒ€๋‚จ. ๋ฌธ์ž์—ด ํ•ฉ์น˜๊ธฐ๋„ ๊ฐ€๋Šฅ

 

[๋ฌธ์ œ] - ๋ฐฐ์—ด ์›์†Œ๋“ค์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ

[for๋ฌธ ์‚ฌ์šฉ]

let numberArray = [1,2,3,4,5,6,7,8,9,10]
var sum = 0
for number in numberArray {
    sum += number
}
print(sum)

[filter ์‚ฌ์šฉ]

let array = [5,6,7,8]
array.reduce(0, +)

//๋‹ค๋ฅธ ์—ฐ์‚ฐ๋„ ๊ฐ€๋Šฅ
array.reduce(0, -)

// (1) * (5*6*7*8)
array.reduce(1, *)

// (16800) / (5 /6 /7 /8) = 10
array.reduce(16800, /))
728x90
๋ฐ˜์‘ํ˜•