Swift/Tips & Tricks

Swift Language) sort, map, filter, reduce

iosswift 2021. 9. 29. 13:57

sort, sorted

sort: 자신 (array) 를 정렬

sorted: array 를 정렬해서 return (새로운 값에 할당, array 자체는 그대로 유지)

 

var numArr = [1,3,2,1,5]

let newArr = numArr.sorted() 
// newArr: [1,1,2,3,5], numArr: [1,3,2,1,5]

numArr.sort() 
// numArr: [1,1,2,3,5]


numArr.sort(by: >)
// decending order. 
// numArr: [5,3,2,1,1]

 

map

array의 각 element 에 대하여 어떤 logic 을 수행, 

logic 이 적용된 각 element 를 새로운 array 로 묶어 return ( 순서 유지)

 

let numArr = [1,3,2,1,5]

// 1. 각 element 에 2 를 곱한 값을 새로운 array 에 저장


// 1.1 가장 기초적인 mapping 형태
let mappedArr = numArr.map { element in 
	return element * 2
}
// mappedArr : [2,6,4,2,10]


// 1.2 '$' 를 사용하는 경우 
let mappedArr2 = numArr.map { $0 * 2 } 
// Swift 가 각 element 를 $0 이라는 값에 자동으로 넣어줌. 이 때 return 생략 가능 (한줄 코드)
// mappedArr2 : [2,6,4,2,10]



// 2. 각 element 를 Int type 에서 string type 으로 바꾼 array 


// 2.1 input, return type 을 지정해서 mapping 하는 경우
let mappedArr3 = numArr.map { (num: Int) -> String in 
	return "\(num)"
}
// mappedArr3 : ["1","3","2","1","5"


// 2.2 '$' 를 사용하는 경우 
let mappedArr4 = numArr.map { "\($0)" } 
// Swift 가 각 element 를 $0 이라는 값에 자동으로 넣어줌. 이 때 return 생략 가능 (한줄 코드)
// mappedArr4 : ["1","3","2","1","5"

 

filter

array 내에서 어떤 condition 을 만족하는 값들만 새로운 array 로 묶어 return (순서 유지)

let numArr = [1,3,2,1,5,6]


let oddNumbers = numArr.filter { element in 
	return element % 2 == 1 
}
// oddNumbers : [1,3,1,5]


// return 없이, $ 활용
let evenNumbers = numArr.filter {
	$0 % 2 == 0
}
//evenNumbers: [2,6]

 

reduce

array 의 각 element 들을 logic 에 따라 하나의 값으로 합쳐서 return 

let numArr.= [1,3,2,1,5,6]

let reduced = numArr.reduce(0) { result, element in 
	return result + element
}
// reduced: 18

let reduced2 = numArr.reduce(0) { $0 + $1 }
// reduced2: 18