Swift中的字符串和字符比较对区域设置不敏感是什么意思?
发布时间:2020-12-14 05:27:46 所属栏目:百科 来源:网络整理
导读:我开始学习 Swift语言,我很好奇 Swift中的字符串和字符比较对语言环境不敏感是什么意思?这是否意味着所有字符都像UTF-8字符一样存储在Swift中? (现在为Swift 3更新了所有代码示例.) 将Swift字符串与比较做词典比较 基于所谓的“Unicode Normalization Form
我开始学习
Swift语言,我很好奇
Swift中的字符串和字符比较对语言环境不敏感是什么意思?这是否意味着所有字符都像UTF-8字符一样存储在Swift中?
(现在为Swift 3更新了所有代码示例.)
将Swift字符串与<比较做词典比较 例如,分解 "?" = U+00E4 = LATIN SMALL LETTER A WITH DIAERESIS 是两个Unicode代码点的序列 U+0061,U+0308 = LATIN SMALL LETTER A + COMBINING DIAERESIS 出于演示目的,我编写了一个小的String扩展来转储 extension String { var unicodeData : String { return self.unicodeScalars.map { String(format: "%04X",$0.value) }.joined(separator: ",") } } 现在让我们拿一些字符串,用<:对它们进行排序 let someStrings = ["?ψ","?ψ","?x","?x"].sorted() print(someStrings) // ["a","?","?","?","?","b"] 并转储每个字符串的Unicode代码点(原始和分解 for str in someStrings { print("(str) (str.unicodeData) (str.decomposedStringWithCanonicalMapping.unicodeData)") } 输出 ?x 00E4,0078 0061,0308,0078 ?x 01DF,0304,0078 ?ψ 01DF,03C8 0061,03C8 ?ψ 00E4,03C8 很好地表明,比较是通过Unicode的词典排序完成的 对于多个字符的字符串也是如此,如下例所示 let someStrings = ["?ψ","?x"].sorted() 上面循环的输出是 ?x 00E4,03C8 意思就是 "?x" < "?x",but "?ψ" > "?ψ" (这对我来说至少是意料之外的). 最后让我们将它与区域敏感的排序进行比较,例如瑞典语: let locale = Locale(identifier: "sv") // svenska var someStrings = ["?","a","b"] someStrings.sort { $0.compare($1,locale: locale) == .orderedAscending } print(someStrings) // ["a","b","?"] 如您所见,结果与Swift<排序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |