假设我们有一个名为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'升序或降序?
首先,将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 }
上面的例子按降序给出了结果。
Swift 4.0, 4.1和4.2:
首先,我创建了imageFile类型的可变数组,如下所示
var arr = [imageFile]()
创建类型为imageFile的可变对象图像,并为属性赋值,如下所示
var image = imageFile()
image.fileId = 14
image.fileName = "A"
现在,将这个对象追加到数组arr
arr.append(image)
现在,将不同的属性分配给相同的可变对象,即图像
image = imageFile()
image.fileId = 13
image.fileName = "B"
现在,再次将image object追加到数组arr中
arr.append(image)
现在,我们将对数组arr对象中的fileId属性应用升序。使用<符号按升序排列
arr = arr.sorted(by: {$0.fileId < $1.fileId}) // arr has all objects in Ascending order
print("sorted array is",arr[0].fileId)// sorted array is 13
print("sorted array is",arr[1].fileId)//sorted array is 14
现在,我们将在数组arr对象中的fileId属性上应用降序。降序使用>符号
arr = arr.sorted(by: {$0.fileId > $1.fileId}) // arr has all objects in Descending order
print("Unsorted array is",arr[0].fileId)// Unsorted array is 14
print("Unsorted array is",arr[1].fileId)// Unsorted array is 13
在Swift 4.1和4.2中,用于排序使用
let sortedArr = arr.sorted { (id1, id2) -> Bool in
return id1.fileId < id2.fileId // Use > for Descending order
}
[为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)