반응형
sorted(by:) 메서드란?
sorted(by:) 메서드는 Swift에서 배열을 특정 기준에 따라 정렬할 때 사용하는 함수입니다.
이 메서드는 배열의 요소들을 비교하여 새로운 정렬된 배열을 반환합니다. 원본 배열은 변경되지 않습니다.
기본 sorted()
let numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
let sortedNumbers = numbers.sorted()
print(sortedNumbers) // 출력: [1, 1, 2, 3, 4, 5, 5, 6, 9]
sorted() 메서드는 배열을 오름차순으로 정렬합니다. 하지만, sorted(by:) 메서드를 사용하면 커스텀 정렬 기준을 제공할 수 있습니다.
sorted(by:)의 시그니처
func sorted(by areInIncreasingOrder: (Element, Element) -> Bool) -> [Element]
- 매개변수: areInIncreasingOrder는 두 요소를 비교하는 클로저로, 첫 번째 요소가 두 번째 요소보다 먼저 와야 하는지를 결정합니다.
- 반환값: 정렬된 새로운 배열을 반환합니다.
sorted(by:)와 클로저의 결합
예제) 내림차순
let numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
let sortedNumbers = numbers.sorted { (a, b) -> Bool in
return a > b
}
print(sortedNumbers) // 출력: [9, 6, 5, 5, 4, 3, 2, 1, 1]
a와 b의 역할:
- 비교 대상: 클로저는 두 개의 요소 a와 b를 비교하여, a가 b보다 먼저 와야 하는지 여부를 판단합니다.
- 순서 결정: 클로저가 true를 반환하면 a가 b보다 먼저 오도록 배열을 재배열합니다. false를 반환하면 b가 a보다 먼저 옵니다.
예제)복잡한 정렬 기준
struct Person {
let name: String
let age: Int
}
let people = [
Person(name: "Alice", age: 30),
Person(name: "Bob", age: 25),
Person(name: "Charlie", age: 35)
]
let sortedPeople = people.sorted { (a, b) -> Bool in
if a.age != b.age {
return a.age < b.age
} else {
return a.name < b.name
}
}
for person in sortedPeople {
print("\(person.name), \(person.age)")
}
// 출력:
// Bob, 25
// Alice, 30
// Charlie, 35
나이를 기준으로 오름차순 정렬하고, 나이가 같을 경우 이름을 기준으로 오름차순 정렬합니다.
클로저의 간결한 작성
// 기존 방식
let sortedNumbers = stringNumbers.sorted { (a, b) -> Bool in
return a + b > b + a
}
// 축약된 방식
let sortedNumbers = stringNumbers.sorted { $0 + $1 > $1 + $0 }
다양한 정렬 기준 적용
클로저를 사용하면 다양한 정렬 기준을 쉽게 적용할 수 있습니다. 예를 들어, 문자열의 길이 기준으로 정렬하거나, 사용자 정의 객체의 특정 속성을 기준으로 정렬할 수 있습니다.
let strings = ["apple", "banana", "cherry", "date"]
// 문자열 길이 기준 오름차순 정렬
let sortedByLength = strings.sorted { $0.count < $1.count }
print(sortedByLength) // 출력: ["date", "apple", "banana", "cherry"]
반응형
'iOS > Swift' 카테고리의 다른 글
[Swift] split과 components (0) | 2024.09.16 |
---|---|
[Swift] global과 static은 기본적으로 lazy (0) | 2024.07.30 |
[Swift] NSObjectProtocol, NSObject (0) | 2024.07.16 |
[Swift] 고차함수 (map, filter, reduce, compactMap, flatMap) (0) | 2024.07.05 |
[Swift] 타입에러 경고 Cast from 'JSON?' to unrelated type ' ' always fails (0) | 2024.07.04 |