Swift how to sort array of custom objects by property value Swift how to sort array of custom objects by property value arrays arrays

Swift how to sort array of custom objects by property value


First, declare your Array as a typed array so that you can call methods when you iterate:

var images : [imageFile] = []

Then you can simply do:

Swift 2

images.sorted({ $0.fileID > $1.fileID })

Swift 3+

images.sorted(by: { $0.fileID > $1.fileID })

The example above gives desc sort order


[Updated for Swift 3 with sort(by:)] This, exploiting a trailing closure:

images.sorted { $0.fileID < $1.fileID }

where you use < or > depending on ASC or DESC, respectively. If you want to modify the images array, then use the following:

images.sort { $0.fileID < $1.fileID }

If you are going to do this repeatedly and prefer to define a function, one way is:

func sorterForFileIDASC(this:imageFile, that:imageFile) -> Bool {  return this.fileID < that.fileID}

and then use as:

images.sort(by: sorterForFileIDASC)


Nearly everyone gives how directly, let me show the evolvement:

you can use the instance methods of Array:

// general form of closureimages.sortInPlace({ (image1: imageFile, image2: imageFile) -> Bool in return image1.fileID > image2.fileID })// types of closure's parameters and return value can be inferred by Swift, so they are omitted along with the return arrow (->)images.sortInPlace({ image1, image2 in return image1.fileID > image2.fileID })// Single-expression closures can implicitly return the result of their single expression by omitting the "return" keywordimages.sortInPlace({ image1, image2 in image1.fileID > image2.fileID })// closure's argument list along with "in" keyword can be omitted, $0, $1, $2, and so on are used to refer the closure's first, second, third arguments and so onimages.sortInPlace({ $0.fileID > $1.fileID })// the simplification of the closure is the sameimages = images.sort({ (image1: imageFile, image2: imageFile) -> Bool in return image1.fileID > image2.fileID })images = images.sort({ image1, image2 in return image1.fileID > image2.fileID })images = images.sort({ image1, image2 in image1.fileID > image2.fileID })images = images.sort({ $0.fileID > $1.fileID })

For elaborate explanation about the working principle of sort, see The Sorted Function.