654 Stimmen

Wie man ein Array von benutzerdefinierten Objekten nach dem Wert einer Eigenschaft in Swift sortiert

Sagen wir, wir haben eine benutzerdefinierte Klasse namens imageFile und diese Klasse enthält zwei Eigenschaften:

class imageFile  {
    var fileName = String()
    var fileID = Int()
}

Viele von ihnen sind in einem Array gespeichert:

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)

Wie kann ich das Bilderarray nach 'fileID' in aufsteigender oder absteigender Reihenfolge sortieren?

5voto

Illya Krit Punkte 825

Ich mache es so und es funktioniert:

var images = [imageFile]() images.sorted(by: {$0.fileID.compare($1.fileID) == .orderedAscending })

3voto

Hanny Punkte 1302

Wenn Sie das ursprüngliche Array benutzerdefinierter Objekte sortieren möchten, gibt es hier eine weitere Möglichkeit, dies in Swift 2.1 zu tun

var myCustomerArray = [Customer]()
myCustomerArray.sortInPlace {(customer1:Customer, customer2:Customer) -> Bool in
    customer1.id < customer2.id
}

Wo id eine Ganzzahl ist. Sie können den gleichen < Operator auch für String Eigenschaften verwenden.

Sie können mehr über seine Verwendung erfahren, indem Sie sich ein Beispiel hier ansehen: Swift2: Nearby Customers

3voto

Siddharth Chauhan Punkte 1309
var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]

students.sort(by: >)

print(students)

Druckt : "["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"

2voto

Mojtaba Hosseini Punkte 68078

Sortieren mit KeyPath

Sie können nach KeyPath sortieren wie folgt:

myArray.sorted(by: \.fileName, <) /* Verwendung von `<` für aufsteigende Sortierung */

Indem Sie diese hilfreiche kleine Erweiterung implementieren.

extension Collection{
    func sorted(
        by keyPath: KeyPath,
        _ comparator: (_ lhs: Value, _ rhs: Value) -> Bool) -> [Element] {
        sorted { comparator($0[keyPath: keyPath], $1[keyPath: keyPath]) }
    }
}

Hoffentlich fügt Swift dies in naher Zukunft im Kern der Sprache hinzu.

1voto

Swift 3 & 4 & 5

Ich hatte ein Problem mit Groß- und Kleinschreibung

also habe ich diesen Code gemacht

let sortedImages = images.sorted(by: { $0.fileID.lowercased() < $1.fileID.lowercased() })

und benutze dann sortedImages

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X