排序包含Å,Ä和Ö的字符串数组 - Swift

atl*_*las 16 sorting string ios swift

我正在尝试按字母顺序对字符串数组进行排序.使用标准排序功能,当字符串不包含Å,Ä或Ö(瑞典语)时,它可以工作.

我想点A ... Z,Å,Ä,Ö.而是产生的订单是A ... Z,Ä,Å,Ö.

我尝试使用localizedCompare,但没有让它工作.在这种情况下,Å和Ä被翻译为'A'和Ö到'O'.

let songs = self.allSongs.sort { return $0.title.localizedCompare($1.title) == .OrderedAscending }
Run Code Online (Sandbox Code Playgroud)

关于如何做到这一点的任何想法?

Mar*_*n R 29

我想点A ... Z,Å,Ä,Ö

这是瑞典语语言环境中定义的排序,因此如果当前语言环境不是瑞典语,则必须明确设置它:

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

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

print(sortedTitles) // ["A", "Z", "Å", "Ä", "Ö"]
Run Code Online (Sandbox Code Playgroud)

对于不区分大小写的排序,请添加options: .CaseInsensitiveSearch 参数.

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", "Å", "Ä", "Ö"]
Run Code Online (Sandbox Code Playgroud)