Swift에서 사용자 정의 객체를 정렬하기 위해서는 비교 함수(comparison function)를 작성해야 합니다. 비교 함수를 작성하면 Swift 정렬 메서드를 사용하여 객체를 정렬할 수 있습니다.
비교 함수 작성하기
비교 함수를 작성하기 위해서는 Comparable
프로토콜을 준수하는 객체여야 합니다. Comparable
프로토콜은 객체 간에 크기 비교를 가능하게 해주는 프로토콜입니다. 사용자 정의 객체를 정렬하기 위해서는 객체에 Comparable
프로토콜을 채택하고, <
연산자를 구현해야 합니다.
struct Person: Comparable {
let name: String
let age: Int
static func < (lhs: Person, rhs: Person) -> Bool {
return lhs.age < rhs.age
}
}
let person1 = Person(name: "John", age: 30)
let person2 = Person(name: "Jane", age: 25)
let person3 = Person(name: "Mike", age: 35)
let persons = [person1, person2, person3].sorted()
// [person2, person1, person3]
위의 예제에서 Person
구조체는 Comparable
프로토콜을 채택하고 <
연산자를 구현하여 age
에 따라 크기 비교를 가능하게 합니다. persons
배열을 sorted()
메서드로 정렬하면 age
를 기준으로 오름차순으로 정렬된 결과를 얻을 수 있습니다.
추가적인 비교 조건 적용하기
여러 개의 조건을 사용하여 정렬할 수도 있습니다. 이 경우, 비교 함수에서 추가적인 조건을 구현하면 됩니다.
struct Person: Comparable {
let name: String
let age: Int
static func < (lhs: Person, rhs: Person) -> Bool {
if lhs.age == rhs.age {
return lhs.name < rhs.name
}
return lhs.age < rhs.age
}
}
let person1 = Person(name: "John", age: 30)
let person2 = Person(name: "Jane", age: 25)
let person3 = Person(name: "Mike", age: 35)
let person4 = Person(name: "Jane", age: 30)
let persons = [person1, person2, person3, person4].sorted()
// [person2, person4, person1, person3]
위의 예제에서 name
이 같은 경우 age
로 비교하는 추가적인 조건을 구현했습니다. persons
배열을 sorted()
메서드로 정렬하면 age
를 우선으로 오름차순으로 정렬되고, age
가 같은 경우 name
을 기준으로 정렬됩니다.
결론
Swift에서 사용자 정의 객체를 정렬하기 위해서는 비교 함수를 작성해야 합니다. Comparable
프로토콜을 채택하여 <
연산자를 구현하면 객체를 기준에 따라 정렬할 수 있습니다. 추가적인 비교 조건을 사용할 경우, 비교 함수에 조건을 추가하여 정렬하면 됩니다.