2015-05-23 18 views
10

Chciałbym posortować moją szybką tablicę struct przy użyciu innej metody porównywania (np. LocalizedCompare, caseInsensitiveCompare lub localizedCaseInsensitiveCompare). Funkcja szybkiego standardowego sortowania ciągów znaków zamawia wszystkie wielkie litery przed małymi literami. Oto mój kod:Swift: sortowanie z alternatywnym porównaniem

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 } 
    } 
} 

Po wywołaniu powyższy kod oznacza [Jagoda, jabłko, jabłko]. Gorszący. Jakieś sugestie?

+1

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

Odpowiedz

23

można łatwo rozwiązać poprzez porównanie tytułowego lowercaseString następujące:

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

wykorzystaniem localizedCompare powinno to wyglądać tak:

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

To działa dobrze. Dzięki. Znalazłem również lowercaseStringWithLocal, że mogę również zajrzeć. Jakąkolwiek pomoc w implementacji metod takich jak localizedCompare? – Shane

+0

Jeszcze raz dziękuję. Potrzebowałem tylko "powrotu": DataStruct.items.sort {return $ 0.title.localizedCompare ($ 1.title) == .OrderedAscending} – Shane

Powiązane problemy