什么';这是确定Swift字符串是否短于特定长度的最有效方法
什么';这是确定Swift字符串是否短于特定长度的最有效方法,swift,Swift,s是仅由ASCII字符组成的本机Swift字符串。它可能是任意的。判断s是否短于某个长度(比如100k)的最有效方法是什么 如果countElementsBool{ var idx=string.startIndex 变量计数=0 而idx
s
是仅由ASCII字符组成的本机Swift字符串。它可能是任意的。判断s
是否短于某个长度(比如100k)的最有效方法是什么
如果countElements<100_000
不是最有效的,因为countElements
是O(n)复杂度,s
可能有数十亿个字符。如果您确定不需要担心ASCII以外的任何问题,可以使用utf16Count
属性(这是桥接的NSString
的length
属性):
如果您希望能够处理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
func lengthLessThanMax(#string:string,max:Int)->Bool{
var idx=string.startIndex
变量计数=0
而idx
只需选择您想要的:
var emoji=“您确定由SwiftString
支持的NSString
的长度是O(1)而不是O(n)?Swift字符串的-utf16Count
怎么样?这种桥接在引擎盖下是如何工作的?是的,NSString
上的length
属性返回Unicode字符数,而在Swift中,字符串的每个元素可以由多个Unicode字符组成。这是第二部分很难实现的SWIFT字符串不容易计数(也就是说,你需要遍历字符串来知道它有多少个字符)。Ole Begemann有一个更详细的内容。“EAN忘了<代码>。UTF16Cube < /COD>——这实际上是由基金会添加的;它与使用桥接NString的长度相同。
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