将Swift字符串与<比较做词典比较
基于所谓的“Unicode Normalization Form D”(可以用.计算)
decomposedStringWithCanonicalmapPing)
例如,分解
"ä" = U+00E4 = LATIN SMALL LETTER A WITH DIAERESIS
是两个Unicode代码点的序列
U+0061,U+0308 = LATIN SMALL LETTER A + COMBINING DIAERESIS
出于演示目的,我编写了一个小的String扩展来转储
String的内容作为Unicode代码点的数组:
extension String { var unicodeData : String { return self.unicodeScalars.map { String(format: "%04X",let someStrings = ["ǟψ","äψ","ǟx","äx"].sorted()print(someStrings)// ["a","ã","ă","ä","ǟ","b"].value) }.joined(separator: ",") }}
现在让我们拿一些字符串,用<:对它们进行排序
for str in someStrings { print("\(str) \(str.unicodeData) \(str.decomposedStringWithCanonicalmapPing.unicodeData)")}
并转储每个字符串的Unicode代码点(原始和分解
form)在排序数组中:
äx 00E4,0078 0061,0308,0078ǟx 01DF,0304,0078ǟψ 01DF,03C8 0061,03C8äψ 00E4,03C8
输出
let someStrings = ["ǟψ","äx"].sorted()
很好地表明,比较是通过Unicode的词典排序完成的
分解形式的代码点.
对于多个字符的字符串也是如此,如下例所示
显示.同
äx 00E4,03C8
上面循环的输出是
"äx" < "ǟx",but "äψ" > "ǟψ"
意思就是
let locale = Locale(IDentifIEr: "sv") // svenskavar someStrings = ["ǟ","a","b"]someStrings.sort { .compare(,locale: locale) == .orderedAscending}print(someStrings)// ["a","b","ǟ"]
(这对我来说至少是意料之外的).
最后让我们将它与区域敏感的排序进行比较,例如瑞典语:
如您所见,结果与Swift<排序.
总结以上是内存溢出为你收集整理的Swift中的字符串和字符比较对区域设置不敏感是什么意思?全部内容,希望文章能够帮你解决Swift中的字符串和字符比较对区域设置不敏感是什么意思?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)