กับสวิฟท์ 5 Array
มีสองวิธีที่เรียกว่าและsorted()
sorted(by:)
วิธีแรกsorted()
มีการประกาศดังต่อไปนี้:
ส่งคืนองค์ประกอบของคอลเลกชันที่เรียงลำดับ
func sorted() -> [Element]
วิธีที่สองsorted(by:)
มีการประกาศดังต่อไปนี้:
ส่งคืนองค์ประกอบของคอลเลกชันเรียงลำดับโดยใช้เพรดิเคตที่กำหนดเป็นการเปรียบเทียบระหว่างองค์ประกอบ
func sorted(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> [Element]
# 1 เรียงลำดับจากน้อยไปหามากสำหรับวัตถุที่เปรียบเทียบกันได้
หากประเภทองค์ประกอบภายในคอลเล็กชันของคุณสอดคล้องกับComparable
โปรโตคอลคุณจะสามารถใช้sorted()
เพื่อเรียงลำดับองค์ประกอบของคุณตามลำดับจากน้อยไปหามาก รหัสสนามเด็กเล่นต่อไปนี้แสดงวิธีใช้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]
*/
โปรดทราบว่า Swift ยังมีวิธีการสองวิธีที่เรียกว่าsort()
และsort(by:)
เป็นคู่หูของsorted()
และsorted(by:)
ถ้าคุณต้องการเรียงลำดับคอลเลกชันของคุณในสถานที่