对包含Å、Ä和Ö的字符串数组进行排序 - Swift

25

我正在尝试按字母顺序对字符串数组进行排序。使用标准的 sort 函数可以正常工作,但是当字符串包含Å、Ä或Ö(瑞典语)时会出现问题。

我想要按照 A...Z、Å、Ä、Ö 的顺序排序。但实际上得到的排序结果是 A...Z、Ä、Å、Ö。

我尝试使用 localizedCompare,但没有成功。在这种情况下,Å 和 Ä 被翻译成了'A',而 Ö 被翻译成了'O'。

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

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

1个回答

45

我想按照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", "Å", "Ä", "Ö"]

要进行不区分大小写的排序,请添加 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", "Å", "Ä", "Ö"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接