假设我们有一个名为imageFile的自定义类,这个类包含两个属性:
class imageFile {
var fileName = String()
var fileID = Int()
}
很多都存储在一个数组中:
var images : Array = []
var aImage = imageFile()
aImage.fileName = "image1.png"
aImage.fileID = 101
images.append(aImage)
aImage = imageFile()
aImage.fileName = "image1.png"
aImage.fileID = 202
images.append(aImage)
我如何排序的图像数组由'fileID'升序或降序?
[为Swift 3更新了sort(by:)]这,利用一个尾随闭包:
images.sorted { $0.fileID < $1.fileID }
根据ASC或DESC分别使用<或>。如果你想修改图像数组,那么使用以下命令:
images.sort { $0.fileID < $1.fileID }
如果你要重复这样做,并且更喜欢定义一个函数,一种方法是:
func sorterForFileIDASC(this:imageFile, that:imageFile) -> Bool {
return this.fileID < that.fileID
}
然后用as:
images.sort(by: sorterForFileIDASC)
斯威夫特3、4、5所示
struct imageFile {
var fileName = String()
var fileID = Int()
}
//append objects like this
var arrImages = [imageFile]()
arrImages.append(.init(fileName: "Hello1.png", fileID: 1))
arrImages.append(.init(fileName: "Hello3.png", fileID: 3))
arrImages.append(.init(fileName: "Hello2.png",fileID: 2))
//array sorting using below code
let sortImagesArr = arrImages.sorted(by: {$0.fileID < $1.fileID})
print(sortImagesArr)
//output
imageFile(fileName: "Hello1.png", fileID: 1),
imageFile(fileName: "Hello2.png", fileID: 2),
imageFile(fileName: "Hello3.png", fileID: 3)
首先,将Array声明为类型化数组,以便在迭代时调用方法:
var images : [imageFile] = []
然后你可以简单地做:
斯威夫特2
images.sorted({ $0.fileID > $1.fileID })
斯威夫特3
images.sorted(by: { $0.fileID > $1.fileID })
斯威夫特5
images.sorted { $0.fileId > $1.fileID }
上面的例子按降序给出了结果。
如果你要在多个地方对这个数组排序,让你的数组类型Comparable是有意义的。
class MyImageType: Comparable, Printable {
var fileID: Int
// For Printable
var description: String {
get {
return "ID: \(fileID)"
}
}
init(fileID: Int) {
self.fileID = fileID
}
}
// For Comparable
func <(left: MyImageType, right: MyImageType) -> Bool {
return left.fileID < right.fileID
}
// For Comparable
func ==(left: MyImageType, right: MyImageType) -> Bool {
return left.fileID == right.fileID
}
let one = MyImageType(fileID: 1)
let two = MyImageType(fileID: 2)
let twoA = MyImageType(fileID: 2)
let three = MyImageType(fileID: 3)
let a1 = [one, three, two]
// return a sorted array
println(sorted(a1)) // "[ID: 1, ID: 2, ID: 3]"
var a2 = [two, one, twoA, three]
// sort the array 'in place'
sort(&a2)
println(a2) // "[ID: 1, ID: 2, ID: 2, ID: 3]"