2016-12-19 5 views
5

мой объект выглядит следующим образом:сортировать по двум свойствам

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

я хочу, чтобы отсортировать их, чтобы иметь результат, как:

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

Так что мне нужно отсортировать по разделам, и в каждой секции по заказ.

Вот что я делаю: «раздел ..»

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

Строка только для примера, это может быть другая вещь, поэтому я не могу просто использовать символ для сортировки. Мне нужен реальный приоритет для строки X.

+2

Возможный дубликат [Swift - Сортировка массива объектов с множеством критериев] (http://stackoverflow.com/questions/37603960/swift-sort-array-of-objects-with-multiple-criteria) – Hamish

+0

Кажется, вы используете Realm. Вы должны учесть это явно в своем вопросе. Вы можете отсортировать результат после создания Swift Array, как показано в некоторых ответах, но вы можете использовать [другой метод сортировки] (https://realm.io/docs/swift/latest/api/Classes/Results.html#/s: FC10RealmSwift7Results6sorteduRd__s8SequenceWd__8Iterator7Element_zVS_14SortDescriptorrFT2byqd ___ GS0_x_) класса «Результат» Королевства. который может принимать несколько 'SortDescriptor'. – OOPer

ответ

5

Чтобы отсортировать его двумя факторами вы можете сделать свою собственную логику с «отсортированных» метод: Вот пример, который вы можете проверить на детской площадке.

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

Это мощная, большая благодарность вам! – 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"]] 
Смежные вопросы