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

时间:2016-08-02 12:25:33

标签: ios swift string sorting

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

我想订购它像A ... Z,Å,Ä,Ö。而是产生的订单是A ...... Z,Ä,Å,Ö。

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

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

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

1 个答案:

答案 0 :(得分:25)

  

我想订购它像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", "Å", "Ä", "Ö"]