2015-09-06 18 views
11

Il codice seguente funziona per l'ordinamento di una matrice di stringhe se sono tutte minuscole o tutte maiuscole ma voglio ignorare la distinzione tra maiuscole e minuscole. Come potrei farlo? Quanto segue è un array di una classe personalizzata.Ordinamento di una matrice di stringhe e ignorazione della custodia

resultListArray.sort({ $0.fileName.compare($1.fileName) == NSComparisonResult.OrderedAscending })

risposta

20

È possibile utilizzare il metodo String localizedCompare()

aggiornamento: Xcode 8.2 • Swift 3.0.2

let array = ["def","Ghi","Abc" ] 

let sorted1 = array.sorted{$0.compare($1) == .orderedAscending} 
print(sorted1) // ["Abc", "Ghi", "def"] 

let sorted2 = array.sorted{$0.localizedCompare($1) == .orderedAscending} 
print(sorted2) // ["Abc", "def", "Ghi"] 


// you can also use the String compare options parameter to give you more control when comparing your strings 
let sorted3 = array.sorted{$0.compare($1, options: .caseInsensitive) == .orderedAscending } 
print(sorted3) // ["Abc", "def", "Ghi"]\n" 

// which can be simplifyed using the string method caseInsensitiveCompare 
let sorted4 = array.sorted{$0.caseInsensitiveCompare($1) == .orderedAscending} 
print(sorted4) // ["Abc", "def", "Ghi"]\n" 

// or localized caseInsensitiveCompare 
let array5 = ["Cafe B","Café C","Café A"] 
let sorted5 = array5.sorted{$0.localizedCaseInsensitiveCompare($1) == .orderedAscending} 
print(sorted5) // "["Café A", "Cafe B", "Café C"]\n" 
+2

Fantastico grazie! –

+0

@GaryDorman siete i benvenuti –

1

Ecco an answer about overriding compareTo in Java di cambiare il modo sort ordini cose. Cosa succede se converti le stringhe in lettere maiuscole, quindi le confronti?

+1

Sono programmazione in Swift. Normalmente potrei semplicemente convertire le stringhe in maiuscolo o minuscolo ma questa non è un'opzione questa volta. –

+0

Oh, mi scuso. Ho letto male il tag. Vedi questa domanda, quindi: https://stackoverflow.com/questions/31871395/swift-2-iterating-and-upper-lower-case-some-characters – Davislor

+1

Ottenuto il lavoro. Grazie! –

6

È possibile convertire il String in minuscolo e poi confrontarlo:

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

Questo è il metodo che dovrebbe essere utilizzato ed è destinato a questo scopo:

public func caseInsensitiveCompare(aString: String) -> NSComparisonResult 

Nel tuo caso:

resultListArray.sort({ $0.fileName.caseInsensitiveCompare($1.fileName) == NSComparisonResult.OrderedAscending }) 
Problemi correlati