2015-05-23 13 views
10

Vorrei ordinare il mio array struct swift usando un altro metodo di confronto (come localizedCompare, caseInsensitiveCompare o localizedCaseInsensitiveCompare). La funzione di ordinamento dell'array di stringhe standard rapido ordina tutte le lettere maiuscole prima delle lettere minuscole. Ecco il mio codice:Swift: ordina array con confronto alternativo

import Foundation 

struct DataStruct { 

    struct Item { 
     let title: String 
     let number: Int 
    } 

     static var items = [ 
     Item(title: "apple", number: 30), 
     Item(title: "Berry", number: 9), 
     Item(title: "apple", number: 18)] 
} 

class DataFunctions { 
    func sortItemsArrayTitle() { 
     DataStruct.items.sort { $0.title < $1.title } 
    } 
} 

Una volta chiamato, il codice sopra risulta in [Bacca, mela, mela]. Inaccettabile. Eventuali suggerimenti?

+1

DataStruct.items.sort {$ 0.title.lowercaseString < $ 1.title.lowercaseString} –

risposta

23

Si può facilmente risolvere confrontando il lowercaseString titolo come segue:

DataStruct.items.sort { $0.title.lowercaseString < $1.title.lowercaseString } 

usando localizedCompare dovrebbe assomigliare a questo:

DataStruct.items.sort { $0.title.localizedCompare($1.title) == .OrderedAscending } 
+0

Funziona bene. Grazie. Ho trovato anche lowercaseStringWithLocal che posso esaminare anche io. Qualche aiuto su come implementare metodi come localizedCompare? – Shane

+0

Grazie ancora. Serve solo il "ritorno": DataStruct.items.sort {return $ 0.title.localizedCompare ($ 1.title) == .OrderedAscending} – Shane