데이터 관리에 있어 Array는 정말 많이 활용되는 것 같습니다. 활용법이 다양함에 있어 일일이 함수를 만들거나 하는 것이 힘들기도 했는데 swift에서는 자주 사용할 법한 기능들을 함수로서 제공되고 있어 편하고 빠르게 개발할 수 있는 것 같습니다.
처음에 swift에 익숙하지 않았을 때는 잘 몰라서 많이 활용을 하지 못했는데 한 번 활용을 하고 나니까 편해서 자주 사용하게 되는 것 같습니다. 오늘은 대표적으로 filter, map, reduce, sort에 대해서 알아보겠습니다.
함수 원형을 활용한 방법과 간략화 해서 사용하는 방법 두 가지 형태로 나타내 보겠습니다.
1. Filter
첫번째로 filter입니다. 배열을 어떠한 조건에 맞추어 재생성이 가능한 함수입니다. 예시로 Int형 배열을 받아 10 이상의 수를 따로 모은 배열을 생성해 보겠습니다.
let arrayTest: [Int] = [1,3,6,7,9,12,34,65,78,99]
let filterArray = arrayTest.filter { (element) -> Bool in
return element >= 10
}
print(filterArray)
// [12,34,65,78,99]
좀 더 간략화 시킨다면 아래와 같이 작성하실 수 있습니다
let filterArrayShort = arrayTest.filter { $0 >= 10 }
print(filterArrayShort)
// [12,34,65,78,99]
2. Map
다음으로 map에 대해서 알아보겠습니다. map은 조건에 맞추어 배열의 값들을 변경하여 재생성할 수 있습니다. 예시로 위와 같이 Int형 배열을 받아 10 이상은 +10을 10 미만은 *2를 해보겠습니다.
let mapArray = arrayTest.map { (element) -> Int in
return (element >= 10) ? element + 10 : element * 2
}
print(mapArray)
// [2, 6, 12, 14, 18, 22, 44, 75, 88, 109]
map 또한 간략화하면 아래와 같이 만들 수 있습니다.
let mapArrayShort = arrayTest.map { ($0 >= 10) ? $0 + 10 : $0 * 2 }
print(mapArrayShort)
// [2, 6, 12, 14, 18, 22, 44, 75, 88, 109]
여기까지 보시면 filter나 map 양 쪽 간략화를 할 때 $0가 있습니다. 이것이 바로 element의 역할을 하는 것입니다.
3. Reduce
다음으로 reduce에 대해서 알아보겠습니다. reduce는 위의 두 가지와 밑의 sort와 달리 배열을 재생성하는 것이 아니라 특정 조건으로 배열 인덱스들을 계산하여 결괏값을 얻을 때 사용합니다. 예시로 Int형 배열의 총합을 한 번 구해보겠습니다.
let reduceArray = arrayTest.reduce(0) { (result, element) -> Int in
return result + element
}
print(reduceArray)
// 314
reduce는 간략화를 진행하면 아래와 같이 작성할 수 있습니다.
let reduceArrayShort = arrayTest.reduce(0) { $0 + $1 }
print(reduceArrayShort)
// 314
reduce(0) 옆의 0은 result의 초기값입니다.
4. Sort
마지막으로 sort에 대하여 설명 드리겠습니다. 정말 편한 함수인 것 같습니다. 말 그대로 배열의 인덱스를 조건에 맞추어 정렬을 해주는 함수입니다. 예시로 Int형 배열의 내림차순을 작성해 보겠습니다.
let sortArray = arrayTest.sorted { (front, behind) -> Bool in
return front > behind
}
print(sortArray)
// [99, 78, 65, 34, 12, 9, 7, 6, 3, 1]
sort 또한 간략화하면 아래와 같이 작성할 수 있습니다.
let sortArrayShort = arrayTest.sorted { $0 > $1 }
print(sortArrayShort)
// [99, 78, 65, 34, 12, 9, 7, 6, 3, 1]
5. 마무리
간단한 예제와 함께 array함수에서 자주 사용하는 filter, map, reduce, sort에 대하여 작성해보았습니다.
도움이 되었으면 좋겠습니다. 추가 설명이나 지적 사항 있으시면 초보 개발자에게 많은 도움이 될 것 같습니다.
댓글로 알려주세요. 감사합니다.
환경
Xcode 11.3
Swift 5
'Swift > 정보 공유' 카테고리의 다른 글
[Swift] Slider사용해보기 (0) | 2020.02.16 |
---|---|
[Swift] fallthrough에 대해 (0) | 2020.02.09 |
[Swift] stride에 대해 (0) | 2020.02.09 |
[Swift] Array init(repeating:count:)에 대해 (0) | 2020.02.09 |
[Swift] UITabelView에 .xib커스텀 셀을 적용해보기 (0) | 2020.01.26 |