考虑以下谓词
print("S" > "g")
在Xcode上运行它会产生false
,而在tutorialspoint的在线编译器上运行它,或者例如IBM Swift Sandbox(Swift Dev.4.0(2017年9月5日)/平台:Linux(x86_64)),产生true
。
与vs Xcode相比,在线编译器(Linux?)上的谓词结果有何不同?
答案 0 :(得分:1)
这是一个已知的开放式错误" (或者可能是一个已知的限制):
引用Dave Abrahams'评论公开的错误报告:
这主要是由新的字符串工作修复的,其中字符串为# 默认排序顺序将实现为词典排序 FCC规范化的UTF16代码单元。
请注意,在这两个平台上,我们依靠ICU进行规范化服务, 和ICU的不同实现之间的标准化差异 是一个真正的可能性,所以永远不会有两个保证 任意字符串在两个平台上排序相同。
但是,对于Latin-1字符串,例如示例中的字符串,新的 工作将解决问题。
此外,来自The String Manifest:
比较和散列字符串
...
按照这个方案到处都可以让我们进行排序 跨平台的行为一致。目前,我们对String进行排序 根据UCA,除了 - 只在Apple平台上 - 对 ASCII字符按unicode标量值排序。
最有可能的是,OP的特定示例(仅覆盖ASCII字符),根据UCA(Unicode归类算法)进行比较用于Linux平台,而在Apple平台上,则对这些单个ASCII字符进行排序{{1}以ASCII字符开头的(或String
实例)是根据unicode标量值。
String
另见以下Q& A的优秀接受答案: