2011-06-11 18 views

risposta

128

C'è esempio funzionante il seguente di Apple, utilizzando sortedArrayUsingSelector: e localizedCaseInsensitiveCompare: nel Collections Documentation:

sortedArray = [anArray sortedArrayUsingSelector: 
         @selector(localizedCaseInsensitiveCompare:)]; 

Si noti che questo restituirà un nuovo array ordinato. Se si desidera ordinare il vostro NSMutableArray a posto, quindi utilizzare sortUsingSelector: invece, in questo modo:

[mutableArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 
8

Ecco una risposta aggiornata per Swift:

  • ordinamento può essere fatto in Swift con l'aiuto di chiusure. Ci sono due metodi - sort e sorted che facilitano questo.

    var unsortedArray = [ "H", "ello", "Wo", "rl", "d"] 
    var sortedArray = unsortedArray.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending } 
    

    Nota: Qui sorted restituirà un array ordinato. Lo stesso unsortedArray non verrà ordinato.

  • Se si desidera ordinare unsortedArray sé, utilizzare questo

    unsortedArray.sort { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending } 
    


Riferimento:

  • Here è la documentazione per i metodi di ordinamento di Swift.

  • Docs per i diversi metodi di confronto Stringhere.


opzionale:

Invece di usare localizedCaseInsensitiveCompare, questo potrebbe anche essere fatto:

stringArray.sort{ $0.lowercaseString < $1.lowercaseString } 

o anche

stringArray.sort{ $0 < $1 } 

i f si vuole un confronto sensibile caso

+0

Grazie, '.lowercaseString' ha funzionato per me quando ho confrontato gli oggetti con un titolo. 'mediaItems = mediaItems.sorted {$ 0.media.title.lowercaseString> $ 1.media.title.lowercaseString}' –

0

Per me questo ha funzionato ....

areas = [areas sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 

Qui aree è NSArray. Spero che aiuti qualcuno.

1

È facile ottenere l'ordine crescente.Seguire i passaggi a soffietto ,,,

Modello 1:

NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; 
sortedArray=[yourArray sortedArrayUsingDescriptors:@[sortDesc]]; 

se si desidera che l'ordinamento di essere case insensitive, si avrebbe bisogno di impostare il descrittore come questo ,,
Modello 2:

NSSortDescriptor * sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 
sortedArray=[yourArray sortedArrayUsingDescriptors:@[sortDesc]]; 
Problemi correlati