在 xcode Playground 上检查此代码
我正在尝试从 swift 中的字符串中获取最长的前缀子字符串。 该解决方案有效,但我有一个问题
min 函数没有给我所需的“游泳”作为最短字符串
`
var string = "swimftch swim swimftc swill"
let splitArray = string.split(separator: " ")
var shortestString = string
for singleString in splitArray {
//This works fine - gives "swim" as desired
// if shortestString.count > singleString.count {
// shortestString = String(singleString)
// }
//this does not - gives "swill"
shortestString = min(String(singleString), shortestString)
print(shortestString)
}
var isPrefixed = false
func checkSubString() {
for sub in splitArray {
if sub.contains(shortestString) {
print(shortestString)
isPrefixed = true
} else {
isPrefixed = false
}
}
if !isPrefixed {
shortestString.popLast()
checkSubString()
} else {
print(shortestString)
}
}
checkSubString()
`
任何人都可以向我解释一下,为什么 min 没有正确返回最短子字符串?
for singleString in splitArray {
//This works fine - gives "swim" as desired
// if shortestString.count > singleString.count {
// shortestString = String(singleString)
// }
//this does not - gives "swill"
shortestString = min(String(singleString), shortestString)
print(shortestString)
}
swift 中的字符串比较不能基于字符数进行比较。 Swift 字符串根据 Unicode 排序算法进行比较,这意味着:
这就是为什么
shortestString.count > singleString.count
和 shortestString > singleString
不会产生相同的结果。