티스토리 뷰

스위프트의 정렬 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
링크
«   2024/10   »
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 31
글 보관함