var numbers = [ 1, 2, 3 ]
print(numbers.min()) // Optional(1)
print(numbers.max()) // Optional(3)
배열의 요소가 비교가 가능한 프로토콜을 준수하는 타입이라면, max(), min() 메서드를 활용하여 최대, 최솟값을 구할 수 있다
반환 값은 옵셔널 타입이고 언래핑하여 사용할 수 있다
비교 불가능한 요소들의 배열일 경우, 컴파일 에러를 발생하고 빈 배열에서 사용하면 nil 을 반환한다
- 다른 함수를 인자로 받거나, 함수의 결과로 함수를 반환하는 함수
map 함수
- 기존 데이터를 변형하여 새로운 컬렉션을 생성한다
- 기존의 컬렉션의 요소에 대해 정의한 익명함수로 매핑한 결과를 새로운 컬렉션으로 반환한다
let stringArray = ["1", "2", "3", "4", "5"] numberArray = stringArray.map { if let changeToInt = Int($0) { return changeToInt } return 0 }
- $0와 $1
{ } 를 익명함수인 클로저라고 한다. 클로저의 매개변수 이름이 필요하지 않은 경우 단축 인자 이름을 활용할 수 있다.
단축 인자는 순서대로 $0, $1, $2... 으로 표현한다
$0은 첫 번째 인자, $1은 두 번째 인자를 뜻한다
filter 함수
- 기존 컨테이너의 요소 중 조건에 만족하는 값에 대해 새로운 컨테이너를 만들어 반환한다
let numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] let evenNumbers2 = numbers1.filter { $0 % 2 == 0 } // 배열 중 2로 나눈 나머지가 0인 것만 걸러낸다 print(evenNumbers2) // [2, 4, 6, 8]
reduce 함수
- 기존의 컨테이너의 요소에 대해 정의한 클로저로 매핑한 결과를 새로운 컨테이너로 반환한다
let numbers3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let sum1 = numbers3.reduce(0, +) // 초기값을 0으로 설정하고 각 배열들을 차례로 더한다 print(sum1) // 또 다른 케이스 let numbers4 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let sum2 = numbers4.reduce(0) { $0 + $1 } /* 첫 번째 인자인 1과 두 번째 인자인 2를 더하고 3이 된다. 더한 값 3은 다시 첫 번째 인자가 되고, 두 번째 인자는 숫자 3이 된다. 3 + 3 = 6 이 되고 -> 6 + 4 = 10 ... 이런 식으로 반복이 되고 배열의 끝까지 나아간다 */ print(sum2)