我发现我可以直接在Swift中比较String格式的两个数字。
最初,我试图将我的String格式编号转换为double或Int,然后进行比较。当我意外发现我可以直接比较它们时,我在操场上做了一些测试。看起来结果都是正确的,即使数字是空字符串或“(Double)”vs“(Int)” (例外):字符串格式中带负数的测试用例将无法进行比较。
有人知道这是否是Swift String中的默认行为?我不确定我是否可以在我的程序中使用它。
示例:
var numStrs1 = ["15", "12.2", "15", ""]
var numStrs2 = ["13", "12", "", "23.0"]
func compareNumStr(numStr1:String, numStr2:String) -> Bool {
return numStr1 > numStr2
}
for var i = 0; i < numStrs1.count; ++i{
compareNumStr(numStrs1[i], numStrs2[i])
}
答案 0 :(得分:1)
字符串比较的默认实现依赖于 Unicode排序规则算法来源:http://oleb.net/blog/2014/07/swift-strings/
您现在正在进行的比较不是规范的Int/Double
比较,而是它如何转换为unicode。根据您希望如何使用这些信息,它可能不适合所有情况。就像你发现负数一样,你应该使用.toInt
方法来获得你想要的数字,并比较整数而不是比较字符串。