确定Swift字符串是否短于某个长度的最有效方法是什么

时间:2014-11-03 02:09:17

标签: swift

s是一个原生的Swift字符串,仅由ASCII字符组成。它可能是任意长的。找出s是否短于一定长度(比如100k)的最有效方法是什么?

if countElements(s) < 100_000效率最高,因为countElements是O(n)复杂度,s可能有数十亿个字符。

2 个答案:

答案 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

Get the length of a String找到