2016-12-19 4 views
5

mein Objekt wie folgt aussieht:sortiert nach zwei Eigenschaften

object = [[section: "section1", order: "1"], 
      [section: "section2", order: "1"], 
      [section: "section1", order: "2"], 
      [section: "section2", order: "2"]] 

ich es sortieren mag, wie ein Ergebnis haben:

[[section: "section1", order: "1"], 
[section: "section1", order: "2"], 
[section: "section2", order: "1"], 
[section: "section2", order: "2"]] 

Also muß ich von Abschnitt sortieren, und in jedem Abschnitt durch Auftrag.

Das ist, was ich tue:

return Observable.from(realm 
      .objects(Section.self).sorted(byProperty: "order", ascending: true) 

Der String „Abschnitt ..“ ist nur für das Beispiel, kann es andere Sache sein, so kann ich nicht nur den Charakter verwenden zu sortieren. Ich brauche eine echte Priorität auf X-String.

+2

Mögliches Duplikat [Swift - Sortierung Array von Objekten mit mehreren Kriterien] (http://stackoverflow.com/questions/37603960/swift-sort-array-of-objects-with-multiple-criteria) – Hamish

+0

Scheint du benutzt Realm. Sie sollten es besser in Ihrer Frage notieren. Sie können das Ergebnis nach dem Erstellen eines Swift-Arrays sortieren, wie in einigen Antworten gezeigt, aber Sie können [eine andere sortierte Methode] verwenden (https://realm.io/docs/swift/latest/api/Classes/Results.html#)./s: FC10RealmSwift7Results6sorteduRd__s8SequenceWd__8Iterator7Element_zVS_14SortDescriptorrFT2byqd ___ GS0_x_) der 'Result'-Klasse von Realm. das kann mehrere 'SortDescriptor's beinhalten. – OOPer

Antwort

5

Um es durch zwei Faktoren sortieren Sie Ihre eigene Logik mit dem „sortiert“ Methode tun können: Hier ist ein Beispiel, das Sie auf einem Spielplatz testen können.

struct MyStruct { 
    let section: String 
    let order: String 
} 
let array = [MyStruct(section: "section1", order: "1"), 
      MyStruct(section: "section2", order: "1"), 
      MyStruct(section: "section1", order: "2"), 
      MyStruct(section: "section2", order: "2")] 

let sortedArray = array.sorted { (struct1, struct2) -> Bool in 
    if (struct1.section != struct2.section) { // if it's not the same section sort by section 
     return struct1.section < struct2.section 
    } else { // if it the same section sort by order. 
     return struct1.order < struct2.order 
    } 
} 
print(sortedArray) 
+0

Das ist mächtig, ein großes Dankeschön an Sie! – Makaille

0
let object = [["section": "section1", "order": "2"], 
       ["section": "section2", "order": "2"], 
       ["section": "section1", "order": "1"], 
       ["section": "section2", "order": "1"], 
       ["section": "section5", "order": "3"], 
       ["section": "section6", "order": "1"], 
       ["section": "section5", "order": "1"]] 

    let Ordered = object.sorted{$0["order"]! < $1["order"]! } 

    let OrderedObjects = Ordered.sorted{$0["section"]! < $1["section"]! } 


    print(OrderedObjects) 

//[["section": "section1", "order": "1"], ["section": "section1", "order": "2"], ["section": "section2", "order": "1"], ["section": "section2", "order": "2"], ["section": "section5", "order": "1"], ["section": "section5", "order": "3"], ["section": "section6", "order": "1"]] 
Verwandte Themen