
공식문서에는 sort()는 컬렉션을 제자리에 정렬합니다.라고 한다.
내가 하고 싶은 것은 배열에서 정렬을 하고 싶은 거고 배열은 컬렉션 타입이니깐 잘 찾은 거 같다!!
comparable이 메서드를 호출하면 프로토콜을 준수하는 변경 가능한 요소 컬렉션을 정렬할 수 있다고 한다. 또한 요소는 오름차순으로 정렬된다고 한다.
comparable이 뭘까??

관계 연산자 <, <=, >=, >를 사용하여 비교할 수 있는 형식이라고 한다.
그럼 다시 sort()를 알아보자 !!
글로만 이해하기 힘드니 예시를 한번 보자!!
var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
students.sort()
print(students)
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"
학생 이름 목록을 정렬해 보았다.
Swift 문자열은 Comparable프로토콜을 따르므로 이름은 보다 작음 연산자(<)에 따라 오름차순으로 정렬된다.
만약 난 내림차순으로 정렬하고 싶은데...라고 한다면 🤔
컬렉션의 요소를 내림차순으로 정렬하려면 보다 큼 연산자(>)를 sort(by:) 메서드에 전달해주면 되는데
students.sort(by: >)
print(students)
// Prints "["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"
요런 식으로 사용하면 된다.
애플 공식문서에 따르면 정렬 알고리즘은 안정성이 보장됩니다. 안정적인 정렬은 동일하다고 비교되는 요소의 상대적 순서를 유지합니다.라고 한다.
여기서 "안정성"이란 정렬 알고리즘이 동일한 값(또는 키)을 가진 요소들의 상대적인 순서를 유지하는 능력을 가리킨다.
예를 들어보면
두 개의 요소 A와 B가 있고 A가 B보다 먼저 나와야 한다고 하면, 안정적인 정렬 알고리즘은 A와 B의 상대적인 순서를 유지할 것이다.
만약 A와 B가 동일한 값이라면(동등한 키를 가진다면), 정렬 후에도 A가 B보다 앞에 위치하는 것을 의미한다.
요렇게 하고 sort()를 넘어가려고 했지만 ~~
사실 sort()만 검색해 봐도 sorted() 함께 검색이 나오고 꼭 서로 비교를 한다.
그럼 sort()만 알고 넘어갈 수 없으니깐 sorted()도 알아보야겠지!!

sorted()는 정렬된 시퀀스의 요소를 반환합니다.라고 한다.
어!!
sort()는 컬렉션을 제자리에 정렬합니다.라고 했는데...
sorted()는 정렬된 요소를 반환하는데 차이가 있네!라고 생각할 것이다.
위에서 봤던 예시와 같은 걸로 알아보자면!
let students: Set = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
let sortedStudents = students.sorted()
print(sortedStudents)
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"
이렇게 sorted()를 사용하고
let descendingStudents = students.sorted(by: >)
print(descendingStudents)
// Prints "["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"
기본적으로 오름차순으로 정렬되는 것과 내림차순으로 정렬하려면 보다 큼 연산자(>)를 sort(by:) 메서드에 전달하는 것도 같다!!
하지만!!!
sort()는 원본 배열을 오름차순으로 정렬하고!!
sorted()는 원본 배열은 그대로 두고, 새 배열을 만들어 이를 오름차순으로 정렬한 후 리턴해준다.
let students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
let sortedStudents = students.sorted()
print(sortedStudents)
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"
print(students)
// Prints "["Kofi", "Abena", "Peter", "Kweku", "Akosua"]"
원본 배열인 students를 print 해보면 원본 배열은 그대로인 모습을 볼 수 있다.
새 배열에 오름차순으로 정리된 값들이 들어 있는 모습이다!!
지금까지 배열의 정렬 sort(), sorted()에 대해서 알아보았다!!
이제는 코테 문제에서 모른다고 하기 없기다...
참고 자료
https://developer.apple.com/documentation/swift/array/sort()
sort() | Apple Developer Documentation
Sorts the collection in place.
developer.apple.com
https://developer.apple.com/documentation/swift/array/sorted()
sorted() | Apple Developer Documentation
Returns the elements of the sequence, sorted.
developer.apple.com
'Swift' 카테고리의 다른 글
| [Swift] Combine 알아보기[2] @Published (Publisher), Operator, Scheduler (4) | 2024.03.17 |
|---|---|
| [Swift] Combine 알아보기 [1] Publisher, Subscriber (1) | 2024.03.12 |
| [Swift] forEach(_:) 알아보기 (2) | 2024.02.17 |
| [Swift] Dictionary (2) | 2024.01.01 |
| [Swift] 삼항연산자 (2) | 2023.12.29 |