2015-09-06 11 views
11

Poniższy kod służy do sortowania tablicy ciągów znaków, jeśli wszystkie są pisane małymi literami lub wielkimi literami, ale chcę je zignorować podczas sortowania. Jak mogłem to zrobić? Poniżej znajduje się tablica niestandardowej klasy.Sortowanie tablicy łańcuchów i ignorowanie przypadku

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

Odpowiedz

20

Można użyć metody String localizedCompare()

zmiana: 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

Niesamowite dziękuję! –

+0

@ GaryDorman, serdecznie zapraszamy –

1

Oto an answer about overriding compareTo in Java aby zmienić sposób sort zlecenia rzeczy. Co się stanie, jeśli przekształcisz ciągi znaków w wielkie litery, a następnie porównasz je?

+1

jestem programowania w Swift. Normalnie mógłbym po prostu przekonwertować łańcuchy na wielkie lub małe litery, ale tym razem nie jest to opcja. –

+0

Och, moje przeprosiny. Źle odczytałem tag. Zobacz to pytanie, a następnie: https://stackoverflow.com/questions/31871395/swift-2-iterating-and-upper-lower-case-some-characters – Davislor

+1

Gotowy do pracy. Dziękuję Ci! –

6

Można przekonwertować String na małe litery, a następnie porównać go:

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

Jest to metoda, która powinna być używana i jest przeznaczona do tego celu:

public func caseInsensitiveCompare(aString: String) -> NSComparisonResult 

W twoim przypadku:

resultListArray.sort({ $0.fileName.caseInsensitiveCompare($1.fileName) == NSComparisonResult.OrderedAscending }) 
Powiązane problemy