Swift/학습

[Swift] Array활용법 (filter, map, reduce, sort)

언클린 2020. 1. 23. 20:32
728x90

데이터 관리에 있어 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

728x90