什么';这是确定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=“您确定由Swift
String
支持的
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