You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift字符串数组德语本地化排序异常问题求助

解决德语本地化字符串排序问题

你的问题出在直接用lowercased()做字符串比较——这种方式是基于字符的Unicode编码值排序,完全没有遵循德语的字典排序规则。德语里的变音字母(如ö)在Unicode中编码靠后,所以会被排到对应字母组的末尾,而不是和"oe"变体放在一起。

要实现符合德语规范的排序,你需要利用Swift的本地化比较API,显式指定德语区域的排序规则:

  1. 创建德语(德国)区域的Locale实例,确保排序遵循德语字典序;
  2. 使用compare(_:options:locale:)方法替代直接的字符串比较,该方法会根据指定区域的规则处理变音字母、大小写等。

修正后的代码示例

var bez = [String]()

// 创建德语(德国)区域实例
let germanLocale = Locale(identifier: "de_DE")

// 基于德语本地化规则排序,忽略大小写
let sortedBez = bez.sorted {
    $0.compare($1, options: .caseInsensitive, locale: germanLocale) == .orderedAscending
}

补充说明

  • 如果你的App已经全局切换到德语本地化,也可以用Locale.current替代显式的de_DE,但显式指定区域能避免环境设置带来的意外问题;
  • 德语的排序规则中,变音字母(ä/ö/ü)会被视为对应基础字母(a/o/u)的变体,排序时会和"ae"/"oe"/"ue"形式的字符串归为同一组,位置也符合字典序要求。

内容的提问来源于stack exchange,提问作者K. Wenzel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 21:22:39