Cómo ordenar una matriz de objetos personalizados por valor de propiedad en Swift
Digamos que tenemos una clase personalizada nombrada imageFile
y esta clase contiene dos propiedades:
class imageFile {
var fileName = String()
var fileID = Int()
}
Muchos de ellos se almacenan en una matriz:
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)
¿Cómo puedo ordenar la matriz de imágenes por 'fileID' en orden ascendente o descendente?
Aceptado
Primero, declara tu Array como una matriz escrita para que puedas llamar a métodos cuando iteras:
var images : [imageFile] = []
Entonces simplemente puedes hacer:
veloz 2
images.sorted({ $0.fileID > $1.fileID })
veloz 3
images.sorted(by: { $0.fileID > $1.fileID })
veloz 5
images.sorted { $0.fileId > $1.fileID }
El ejemplo anterior muestra los resultados en orden descendente.
[ Actualizado para Swift 3 con sort(by:) ] Esto, aprovechando un cierre final:
images.sorted { $0.fileID < $1.fileID }
donde utilice <
o >
dependiendo de ASC o DESC, respectivamente. Si desea modificar la images
matriz , utilice lo siguiente:
images.sort { $0.fileID < $1.fileID }
Si va a hacer esto repetidamente y prefiere definir una función, una forma es:
func sorterForFileIDASC(this:imageFile, that:imageFile) -> Bool {
return this.fileID < that.fileID
}
y luego usar como:
images.sort(by: sorterForFileIDASC)