Ios 字符串比较(>;)在不同的平台上返回不同的结果?
考虑以下谓词Ios 字符串比较(>;)在不同的平台上返回不同的结果?,ios,swift,xcode,sorting,closures,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 为什么在线编译器(Linux?)上的谓词与vs Xcode上的谓词结果不同?这是一个已知的开放“bug”(或者更确切地说是一个已知的限制): 引用Dave Abrahams对open bug报告的评
print("S" > "g")
在Xcode上运行此命令会产生false
,而在tutorialspoint的在线编译器或例如IBM Swift Sandbox(Swift Dev.4.0(2017年9月5日)/平台:Linux(x86_64))上运行此命令会产生true
为什么在线编译器(Linux?)上的谓词与vs Xcode上的谓词结果不同?这是一个已知的开放“bug”(或者更确切地说是一个已知的限制):
字符串
的排序(或;字符串
实例以ASCII字符开头)是根据unicode标量值
// ASCII value
print("S".unicodeScalars.first!.value) // 83
print("g".unicodeScalars.first!.value) // 103
// Unicode scalar value
print(String(format: "%04X", "S".unicodeScalars.first!.value)) // 0053
print(String(format: "%04X", "g".unicodeScalars.first!.value)) // 0067
print("S" < "g") // 'true' on Apple platforms (comparison by unicode scalar value),
// 'false' on Linux platforms (comparison according to UCA)
//ASCII值
打印(“S”.unicodeScalars.first!.value)//83
打印(“g”.unicodeScalars.first!.value)//103
//Unicode标量值
打印(字符串(格式:“%04X”,“S”.unicodeScalars.first!.value))//0053
打印(字符串(格式:“%04X”,“g”.unicodeScalars.first!.value))//0067
在苹果平台上打印(“S”<“g”)/“true”(通过unicode标量值进行比较),
//Linux平台上的“错误”(根据UCA进行比较)
另请参见以下问答的最佳公认答案:
“S”
或“G”
)执行字典式比较,我们希望在比较中使用相应的ASCII值(或其unicode标量值:对于ASCII字符,相对顺序为ASCII->(十六进制)unicode标量将被保留)。如果是这样,自然地,“S”
(ASCII 83)将优先于“g”
(ASCII 103),而“g”
(ASCII 71)将优先于“S”
。苹果平台也是如此(正如我在回答中提到的),而Linux平台将根据UCA订购“S”
vs“g”
,并在“S”
之前订购“g”
。相关:@MartinR谢谢。我们是否应该将此线程作为该线程的副本关闭?@dfri我不认为它是副本…@FA95问题本身不是副本(完全是出于被问的动机),但链接线程中的答案提供了足够的信息(类似于我自己的答案)来回答它。对于这种情况,甚至鼓励复制标记线程,因为它们将被连接;一个访问另一个线程会发现这个线程,反之亦然。