Dengan Swift 5, Array
memiliki dua metode yang disebut sorted()
dan sorted(by:)
. Metode pertama sorted()
,, memiliki deklarasi berikut:
Mengembalikan elemen koleksi, diurutkan.
func sorted() -> [Element]
Metode kedua sorted(by:)
,, memiliki deklarasi berikut:
Mengembalikan elemen koleksi, diurutkan menggunakan predikat yang diberikan sebagai perbandingan antar elemen.
func sorted(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> [Element]
# 1. Urutkan dengan urutan menaik untuk objek yang sebanding
Jika tipe elemen di dalam koleksi Anda sesuai dengan Comparable
protokol, Anda akan dapat menggunakannya sorted()
untuk mengurutkan elemen Anda dengan urutan menaik. Kode Playground berikut menunjukkan cara menggunakan 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. Urutkan dengan urutan menurun untuk objek yang sebanding
Jika tipe elemen di dalam koleksi Anda sesuai dengan Comparable
protokol, Anda harus menggunakannya sorted(by:)
untuk mengurutkan elemen Anda dengan urutan menurun.
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. Urutkan dengan urutan naik atau turun untuk objek yang tidak sebanding
Jika jenis elemen di dalam koleksi Anda TIDAK sesuai dengan Comparable
protokol, Anda harus menggunakan sorted(by:)
untuk mengurutkan elemen Anda dengan urutan naik atau turun.
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]
*/
Perhatikan bahwa Swift juga menyediakan dua metode yang disebut sort()
dan sort(by:)
sebagai mitra sorted()
dan sorted(by:)
jika Anda perlu mengurutkan koleksi di tempat.