Cómo ordenar una matriz de objetos personalizados por valor de propiedad en Swift

Resuelto modusCell asked hace 10 años • 20 respuestas

Digamos que tenemos una clase personalizada nombrada imageFiley 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?

modusCell avatar Jun 10 '14 05:06 modusCell
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.

Alex Wayne avatar Jun 09 '2014 22:06 Alex Wayne

[ 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 imagesmatriz , 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)
GoZoner avatar Jun 09 '2014 22:06 GoZoner