오늘은 맵, 필터, 리듀스에 대해 알아볼 예정이다. ps를 풀 때 맵, 필터, 리듀스가 많이 사용됐었는데, 이 기회에 조금 더 잘 활용할 수 있었으면 좋겠다.
스위프트는 함수를 일급 객체로 취급 → 함수를 다른 함수의 전달인자로 사용가능
매개변수로 함수를 갖는 함수 : ‘고차함수’
대표적인 고차함수로는 맵, 필터, 리듀스 등이 있음
let numbers: [Int] = [0, 1, 2, 3, 4]
var doubleNumbers: [Int] = [Int]()
var strings: [String] = [String]()
//for in 사용
for number in numbers {
doubleNumbers.append(number * 2)
strings.append("\(number)")
}
//map 사용
doubleNumbers = numbers.map({ (number: Int) -> Int in
return number * 2
})
strings = numbers.map( { (number: Int) -> String in
return "\(number)"
})
클로저를 통해 더욱 간결하게 사용 가능
//클로저 사용
doubleNumbers = numbers.map({ return $0 * 2 })
let numbers: [Int] = [0, 1, 2, 3, 4, 5]
let evenNumbers: [Int] = numbers.filter { (number: Int) -> Bool in
return number % 2 == 0
} //[0, 2, 4]
let numbers: [Int] = [1, 2, 3]
var sum: Int = numbers.reduce(0, { (result: Int, next: Int) -> Int in
print("\(result) + \(next)")
return result + next
})
// 0 + 1
// 1 + 2
// 3 + 3
print(sum) // 6
//서울 외의 지역에 거주하며 25세 이상인 친구
var result: [Friend] = friends.map { Friend(name: $0.name, gender: $0.gender, location: $0.location, age: $0.age + 1)}
result = result.filter { $0.location != "서울" && $0.age >= 25 }
let string: String = result.reduce("서울 외의 지역에 거주하며 25세 이상인 친구") { $0 + "\n" + "\($1.name) \($1.gender) \($1.location) \($1.age)세"}
맵, 필터, 리듀스 같은 경우에는 처음에도 언급했다싶이 ps에서 자주 활용되기 때문에 많이 사용해보기 !