使用 unicode 字符串对数组进行排序

Isu*_*uru 3 arrays sorting unicode unicode-string swift

我有一个包含 3 个名称的数组。

var patients = ["Kund Karlsson", "Test Vid behov", "Test Övrigt"]
Run Code Online (Sandbox Code Playgroud)

我需要按字母顺序对这些名称进行排序。这是它应该被订购的结果。

  1. 昆德卡尔松
  2. 测试视频行为
  3. 测试概览

我像这样对数组进行排序,patients.sort({ $0 < $1 })但我得到了错误的顺序。

  1. 昆德卡尔松
  2. 测试概览
  3. 测试视频行为

我认为这是由那个 unicode 字母引起的Ö

当字符串中有 unicode 字符时,有没有办法处理排序?

谢谢你。

Kir*_*ins 5

我猜Ö在英语中被视为O,但这可能不适用于所有语言。您可以使用以下内容:

patients.sort {
    $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedDescending
}
Run Code Online (Sandbox Code Playgroud)

结果取决于您系统的区域设置。要使用特定的语言环境:

var patients = ["Kund Karlsson", "Test Vid behov", "Test Övrigt"]
let locale = NSLocale(localeIdentifier: "sv_SE")
patients.sort {
    let str1 = $0 as NSString
    let str2 = $1 as NSString

    return str1.compare(str2, options: .CaseInsensitiveSearch, range: NSMakeRange(0, str1.length), locale: locale) == NSComparisonResult.OrderedAscending
}
Run Code Online (Sandbox Code Playgroud)