티스토리 뷰
스위프트의 정렬 sort와 sorted 차이점에 대해서 알아보려 합니다.
먼저 sort 함수를 살펴봅시다.
sort는 (in place) 제자리에서 정렬합니다.
또한 각 Element가 Comparable 프로토콜을 따라야 정렬할 수 있습니다.
기본적으로 sort는 오름차순으로 정렬됩니다.
내림차순으로 정렬하고 싶으면 sort(by: ) 함수를 활용해서 sort(by: >)로 작성해주면 됩니다.
var arr = [3,35,5,32,1]
arr.sort()
print(arr) // [1, 3, 5, 32, 35]
arr.sort(by: >)
print(arr) // [35, 32, 5, 3, 1]
제자리에서 정렬하기 때문에 어떠한 배열을 리턴하지 않습니다.
시간 복잡도는 O(nlogn)을 나타내고 n은 collection의 길이를 나타냅니다.
그럼 sorted함수를 살펴봅시다.
sorted는 정렬된 요소를 반환합니다.
또한 각 Element가 Comparable 프로토콜을 따르면 정렬할 수 있습니다.
기본적으로 sorted는 오름차순으로 정렬됩니다.
내림차순으로 정렬하고 싶으면 sorted(by: ) 함수를 활용해서 sorted(by: >)로 작성해주면 됩니다.
var arr = [3,35,5,32,1]
// arr.sorted() // warning : Result of call to 'sorted()' is unused
let sortedArr = arr.sorted()
print(sortedArr) // [1, 3, 5, 32, 35]
정렬된 배열을 리턴하기 때문에 리턴 값이 존재합니다.
그래서 arr.sorted()만 작성하면 리턴된 값을 사용하지 않기 때문에 Reuslt of call to sorted() is unused 경고가 발생합니다.
만약 arr.sorted()라고 작성한 후 print(arr)를 찍어보면 어떤 결과가 나올까요?
arr [3,35,5,32,1]이 출력됩니다.
왜냐 arr자체를 정렬한 것이 아니기 때문입니다.
여기서 sort와 sorted 두 함수의 차이가 확실히 보이네요.
시간 복잡도는 O(nlogn)을 나타내고 n은 시퀀스의 길이를 나타냅니다.
다시 말해
sort는 호출된 배열을 변경하여 값들이 정렬됩니다.
반면 sorted는 정렬된 값으로 된 배열의 사본을 리턴합니다.
sort는 배열의 순서 자체를 변경하기 때문에 배열의 원래 순서가 중요한 경우 sort를 호출하면 심각한 문제가 발생합니다.
반면 sorted는 각 값을 복제하고 메모리 사용량을 두 배로 늘립니다. 그래서 사이즈가 큰 배열에 sorted를 하면 메모리 사용량이 ㄷㄷ 또 이미 정렬된 배열에 sorted를 하게 되면 쓸데없이 값을 복제하기 때문에 메모리를 불필요하게 사용하게 됩니다.
'Tech > Swift' 카테고리의 다른 글
스위프트 문자열에서 숫자 뽑아내기 (0) | 2019.10.16 |
---|---|
스위프트 Generic (0) | 2019.10.13 |
정수형 숫자 타입 맞추기 (0) | 2019.07.22 |
스위프트 배열에서 중복을 제거하는 방법 (0) | 2019.05.19 |
Phantom Type 팬텀타입 (0) | 2019.05.07 |
- Total
- Today
- Yesterday
- Xcode
- stanford SwiftUI
- RX
- 스위프트
- leetcode
- iOS SwiftUI
- objc
- objective-c
- wwdc
- 알고리즘
- rxswift
- string
- 머신러닝
- ios
- ARC
- Algorithm
- swiftUI
- Deep learning
- 책
- 딥러닝
- ReactiveX
- 문자열
- Animation
- 책 추천
- 책 후기
- 애니메이션
- 스위프트UI
- SWIFT
- 독서
- swift5
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |