web-dev-qa-db-fra.com

Trier par plusieurs propriétés en utilisant Realm

Comment puis-je commander mes résultats de domaine en utilisant plusieurs propriétés?

Je les trie d'abord en utilisant une propriété comme celle-ci:

allShows = Show.allObjects().sortedResultsUsingProperty("dateStart", ascending: true)

Mais maintenant, je veux aussi faire un tri secondaire par une autre propriété "timeStart". J'ai essayé comme ça:

allShows = Show.allObjects().sortedResultsUsingProperty("dateStart", ascending: true).sortedResultsUsingProperty("timeStart", ascending: true)

Cela ne fera que rendre les résultats triés uniquement par la deuxième propriété. S'il vous plaît aider.

22
codeman

Dans RealmSwift, nous pouvons écrire plusieurs propriétés comme ceci:

let sortProperties = [SortDescriptor(property: "dateStart", ascending: true), SortDescriptor(property: "timeStart", ascending: true)]
allShowsByDate = Realm().objects(MyObjectType).sorted(sortProperties)

Si vous souhaitez utiliser davantage de propriétés, vous pouvez ajouter les valeurs de SortDescriptor() au tableau.

30
Yoshitaka

Je l'ai compris comme ça:

let sortProperties = [RLMSortDescriptor(property: "dateStart", ascending: true), RLMSortDescriptor(property: "timeStart", ascending: true)]
allShowsByDate = Show.allObjects().sortedResultsUsingDescriptors(sortProperties)
16
codeman

Voici comment le faire à partir du royaume 2.5

      dataArray = try! Realm().objects(Book.self)
        .sorted( by: [SortDescriptor(keyPath: "Author", ascending: true), SortDescriptor(keyPath: "Title", ascending: true)] )
3
Andy

Mise à jour pour la syntaxe Swift 4

let sortProperties = [SortDescriptor(keyPath: "queue"), SortDescriptor(keyPath: "name")]
let dogList = realm.objects(Dog.self).sorted(by: sortProperties)
2
Enkh-Amgalan Ch

j'ai trouvé une solution. 

var dataSource: Results<DLVCasting>! = nil
let realm = try! Realm()
let sortDescriptors = [SortDescriptor(property: "someValue", ascending: false)]
dataSource = realm.objects(MyClass.self).sorted(sortDescriptors);
dataSource = dataSource.sorted("anotherValue", ascending: false)

Mais si vous mettez plus d'une description de tri dans un tableau comme dans l'exemple ci-dessous

let sortDescriptors = [SortDescriptor(property: "someValue", ascending: false),SortDescriptor(property: "someValue", ascending: false)]

ça ne marchera pas. Je ne comprends vraiment pas pourquoi. 

1
Nosov Pavel