2016-08-02 16 views
9

Próbuję posortować ciąg alfabetycznie. Przy standardowej funkcji sortowania działa, gdy ciąg nie zawiera znaków Å, Ę lub Ö (szwedzki).Sortowanie ciągów znaków zawierających znaki Å, Ę i Ö - Swift

Chcę zamówić to jak A ... Z, Å, Ę, Ö. Zamiast tego powstaje porządek A ... Z, Ę, Å, Ö.

Próbowałem użyć localizedCompare, ale nie udało mi się uruchomić. W tym przypadku A i Ę zostały przetłumaczone na "A" i Ö na "O".

let songs = self.allSongs.sort { return $0.title.localizedCompare($1.title) == .OrderedAscending } 

Wszelkie pomysły, jak to zrobić?

Odpowiedz

15

Chcę zamówić go jak A ... Z, A, A, O

To uporządkowanie zgodnie z definicją w szwedzkim lokalizacji, więc trzeba ustawić go jawnie, czy prąd locale nie jest szwedzki:

let titles = [ "Z", "Ö", "Å", "Ä", "A" ] 

let swedish = NSLocale(localeIdentifier: "sv") 
let sortedTitles = titles.sort { 
    $0.compare($1, locale: swedish) == .OrderedAscending 
} 

print(sortedTitles) // ["A", "Z", "Å", "Ä", "Ö"] 

dla przypadku niewrażliwe sortowania, dodaj options: .CaseInsensitiveSearch argument.

Upate dla Swift 3:

let titles = [ "Z", "Ö", "Å", "Ä", "A" ] 

let swedish = Locale(identifier: "sv") 
let sortedTitles = titles.sorted { 
    $0.compare($1, locale: swedish) == .orderedAscending 
} 

print(sortedTitles) // ["A", "Z", "Å", "Ä", "Ö"] 
+0

Dzięki, pracował jak czar. – atlas