字符串比较(>)在不同平台上返回不同的结果?

时间:2017-11-18 11:12:48

标签: ios swift xcode sorting closures

考虑以下谓词

print("S" > "g")

在Xcode上运行它会产生false,而在tutorialspoint的在线编译器上运行它,或者例如IBM Swift Sandbox(Swift Dev.4.0(2017年9月5日)/平台:Linux(x86_64)),产生true

与vs Xcode相比,在线编译器(Linux?)上的谓词结果有何不同?

1 个答案:

答案 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的优秀接受答案: