2014-11-28 6 views
16

Desidero ordinare un array su due parametri, ad esempio, nome e quindi descrizione. L'ordinamento dell'array prima per nome e poi per descrizione non funzionerà perché l'array non verrà ordinato per nome.Ordinamento matrice su due parametri in rapido

La soluzione deve essere qualcosa di simile:

var sortedArray = sorted(items, { (o1: MyObject, o2: MyObject) -> Bool in 
      return o1.name < o2.name and o1.description < o2.description 
     }) 

Grazie

risposta

27

tua sintassi è corretta. Basta cambiare la chiusura al

return o1.name == o2.name ? (o1.description < o2.description) : (o1.name < o2.name) 

Se si desidera più di due criteri di ordinamento mi consiglia di utilizzare i vecchi descrittori di ordinamento stile.

let sortedArray = (unsortedArray as NSArray).sortedArrayUsingDescriptors([ 
    NSSortDescriptor(key: "name", ascending: true), 
    NSSortDescriptor(key: "description", ascending: true), 
    .... 
]) as! [Object] 
+0

In modo da ordinare prima il nome e quindi la descrizione. Altrimenti ordina su entrambi i tasti contemporaneamente. –

+0

Non c'è ripetizione. Dovrebbe ordinare per 'name' (parte 3), e solo per' description' (parte 2) quando i nomi sono uguali (parte 1). – Mundi

+0

puoi dirmi come aprire un terzo filtro di ordinamento nella lista? puoi farlo funzionare solo per due – cmario