s
是一个原生的Swift字符串,仅由ASCII字符组成。它可能是任意长的。找出s
是否短于一定长度(比如100k)的最有效方法是什么?
if countElements(s) < 100_000
效率最高,因为countElements
是O(n)复杂度,s
可能有数十亿个字符。
答案 0 :(得分:2)
如果你确定,除了ASCII之外你不需要担心任何其他事情,你可以使用utf16Count
属性(这是length
属性桥接NSString
):
let stringLength = superLongString.utf16Count
如果你想要能够处理Unicode,你需要遍历字符串,你只是不想走整个字符串。这是一个可以计算到极限的函数:
func lengthLessThanMax(#string: String, maximum max: Int) -> Bool {
var idx = string.startIndex
var count = 0
while idx < string.endIndex && count < max {
++count
idx = idx.successor()
}
return count < max
}
lengthLessThanMax(string: "Hello!", maximum: 10)
// true
lengthLessThanMax(string: "Hello! Nice to meet you!", maximum: 10)
// false
答案 1 :(得分:-1)
只需选择您想要的内容:
var emoji = ""
countElements(emoji) //returns 1
emoji.utf16Count //returns 2
emoji.bridgeToObjectiveC().length //returns 2