본문 바로가기

swift

[swift] sort와 sorted

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는 사본을 만드는 것이기 때문에 메모리를 두 배 사용한다. 배열의 크기가 아주 큰 경우에는 비추!