swift
[swift] sort와 sorted
domisolll
2020. 7. 23. 06:28
swift에서 배열을 정렬해주는 함수에는 대표적으로 sort, sorted가 있다.
sort
sort는 원본 배열을 오름차순으로 정렬한다.
그래서 원본 배열을 가지고 있어야 하는 경우 (ex. 하나의 배열을 여러 방식으로 정렬해야 할 경우) 에는 적절하지 않다.
// sort() 함수 사용
var arr = [1, 2, 5, 4, 6]
arr.sort()
print(arr) // [1, 2, 4, 5, 6]
배열의 정렬 기준을 custom 하고 싶다면? sort(by: (Int, Int) throws -> Bool) 함수를 사용하면 된다.
// sort(by: (Int, Int) throws -> Bool) 함수 사용
var arr = [1, 2, 5, 4, 6]
arr.sort { (a, b) -> Bool in
return a < b
}
print(arr) // [1, 2, 4, 5, 6]
var arr = [1, 2, 5, 4, 6]
arr.sort { return $0 < $1 }
print(arr) // [1, 2, 4, 5, 6]
이렇게 전달인자의 이름이 필요없는 경우에는 $0, $1로 간결하게 나타낼 수 있다.
sorted
sorted는 원본 배열은 그대로 두고, 사본을 만들어 이를 오름차순으로 정렬한 후 리턴해준다.
var arr = [1, 2, 5, 4, 6]
arr.sorted()
print(arr) // [1, 2, 5, 4, 6]
var arr = [1, 2, 5, 4, 6]
var copied = arr.sorted()
print(arr) // [1, 2, 5, 4, 6]
print(copied) // [1, 2, 4, 5, 6]
print(arr.sorted()) // [1, 2, 4, 5, 6]
사본을 만들기 때문에 arr를 출력하면 정렬되지 않은 원본 그대로 출력된다.
sorted 함수도 custom 할 수 있지만, 위에서 설명했기 때문에 생략하겠음
sorted는 사본을 만드는 것이기 때문에 메모리를 두 배 사용한다. 배열의 크기가 아주 큰 경우에는 비추!