在这个例子中:
var str1 = "hello"
var str2 = "Hello"
if str1 < str2 { print("hello is less than Hello")}
else {print("hello is more than Hello")}
Run Code Online (Sandbox Code Playgroud)
在什么基础上发现str1大于str2?
使用每个字符的Unicode值,逐个字符地比较两个字符串.由于h具有比H(U + 0048)更高的代码(U + 0068),因此比str1"更大" str2.
根据马丁在这个问题下面的评论,它比我说的要复杂一些.请参阅Swift中的字符串和字符比较对语言环境敏感的含义是什么意思?了解更多细节.
根据Unicode归类算法比较Swift字符串 ,这意味着(有效)
在您的示例中,"hello“和"Hello"具有Unicode值
hello: U+0068, U+0065, U+006C, U+006C, U+006F
Hello: U+0048, U+0065, U+006C, U+006C, U+006F
Run Code Online (Sandbox Code Playgroud)
因此"Hello" < "hello"。
“标准化”或“分解”例如对于带有变音标记的字符是相关的。举个例子,
a = U+0061
ä = U+00E4
b = U+0062
Run Code Online (Sandbox Code Playgroud)
有分解的形式
a: U+0061
ä: U+0061, U+0308 // LATIN SMALL LETTER A + COMBINING DIAERESIS
b: U+0062
Run Code Online (Sandbox Code Playgroud)
因此"a" < "ä" < "b"。
有关更多详细信息和示例,请参见Swift中的字符串和字符比较不区分语言环境是什么意思?