字符串比较如何在Swift中发生

Kaw*_*iKx 4 string swift

在这个例子中:

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?

rma*_*ddy 6

使用每个字符的Unicode值,逐个字符地比较两个字符串.由于h具有比H(U + 0048)更高的代码(U + 0068),因此比str1"更大" str2.

根据马丁在这个问题下面的评论,它比我说的要复杂一些.请参阅Swift中的字符串和字符比较对语言环境敏感的含义是什么意思?了解更多细节.


Mar*_*n R 6

根据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中的字符串和字符比较不区分语言环境是什么意思?