Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

swift ComparableIndex

swiftのComparableプロトコルはEquatableプロトコルを継承しているので、Comparableと同じことがしたいがEquatableは実装したくないという時に使えない。
その場合、Comparableに相当するプロトコルだけを自分で実装すれば良い。

public protocol ComparableIndex {
    static func LessIndex(_ lhs: Self, _ rhs: Self) -> Bool
}

extension Array where Element : ComparableIndex {
    mutating func sortWithIndex() {
        self.sort(by: { (a, b) in Element.LessIndex(a, b) })
    }
}

これは、Arrayを独自の関数LessIndexで比較してソートする関数を追加するエクステンションである。