Swift 5では、およびArray
という2つのメソッドがsorted()
ありsorted(by:)
ます。最初のメソッドsorted()
は次の宣言を持っています:
ソートされたコレクションの要素を返します。
func sorted() -> [Element]
2番目のメソッドsorted(by:)
は、次の宣言を持っています。
要素間の比較として指定された述語を使用してソートされた、コレクションの要素を返します。
func sorted(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> [Element]
#1。比較可能なオブジェクトを昇順で並べ替え
コレクション内の要素タイプがComparable
プロトコルに準拠している場合は、を使用sorted()
して要素を昇順で並べ替えることができます。次のPlaygroundコードは、使用方法を示していますsorted()
。
class ImageFile: CustomStringConvertible, Comparable {
let fileName: String
let fileID: Int
var description: String { return "ImageFile with ID: \(fileID)" }
init(fileName: String, fileID: Int) {
self.fileName = fileName
self.fileID = fileID
}
static func ==(lhs: ImageFile, rhs: ImageFile) -> Bool {
return lhs.fileID == rhs.fileID
}
static func <(lhs: ImageFile, rhs: ImageFile) -> Bool {
return lhs.fileID < rhs.fileID
}
}
let images = [
ImageFile(fileName: "Car", fileID: 300),
ImageFile(fileName: "Boat", fileID: 100),
ImageFile(fileName: "Plane", fileID: 200)
]
let sortedImages = images.sorted()
print(sortedImages)
/*
prints: [ImageFile with ID: 100, ImageFile with ID: 200, ImageFile with ID: 300]
*/
#2。比較可能なオブジェクトを降順で並べ替え
コレクション内の要素タイプがComparable
プロトコルに準拠している場合は、を使用sorted(by:)
して要素を降順でソートする必要があります。
class ImageFile: CustomStringConvertible, Comparable {
let fileName: String
let fileID: Int
var description: String { return "ImageFile with ID: \(fileID)" }
init(fileName: String, fileID: Int) {
self.fileName = fileName
self.fileID = fileID
}
static func ==(lhs: ImageFile, rhs: ImageFile) -> Bool {
return lhs.fileID == rhs.fileID
}
static func <(lhs: ImageFile, rhs: ImageFile) -> Bool {
return lhs.fileID < rhs.fileID
}
}
let images = [
ImageFile(fileName: "Car", fileID: 300),
ImageFile(fileName: "Boat", fileID: 100),
ImageFile(fileName: "Plane", fileID: 200)
]
let sortedImages = images.sorted(by: { (img0: ImageFile, img1: ImageFile) -> Bool in
return img0 > img1
})
//let sortedImages = images.sorted(by: >) // also works
//let sortedImages = images.sorted { $0 > $1 } // also works
print(sortedImages)
/*
prints: [ImageFile with ID: 300, ImageFile with ID: 200, ImageFile with ID: 100]
*/
#3。比較できないオブジェクトを昇順または降順で並べ替える
コレクション内の要素タイプがComparable
プロトコルに準拠していない場合は、を使用sorted(by:)
して要素を昇順または降順に並べ替える必要があります。
class ImageFile: CustomStringConvertible {
let fileName: String
let fileID: Int
var description: String { return "ImageFile with ID: \(fileID)" }
init(fileName: String, fileID: Int) {
self.fileName = fileName
self.fileID = fileID
}
}
let images = [
ImageFile(fileName: "Car", fileID: 300),
ImageFile(fileName: "Boat", fileID: 100),
ImageFile(fileName: "Plane", fileID: 200)
]
let sortedImages = images.sorted(by: { (img0: ImageFile, img1: ImageFile) -> Bool in
return img0.fileID < img1.fileID
})
//let sortedImages = images.sorted { $0.fileID < $1.fileID } // also works
print(sortedImages)
/*
prints: [ImageFile with ID: 300, ImageFile with ID: 200, ImageFile with ID: 100]
*/
スウィフトはとも呼ばれる2つのメソッドを提供することに注意してくださいsort()
とsort(by:)
のカウンターパートとしてsorted()
及びsorted(by:)
もしあなたがその場であなたのコレクションをソートする必要があります。