当 swift 使用时String.count
is it:
O(n)每次我们调用它时,我们都会迭代整个字符串以对其进行计数
or
O(1)其中 swift 之前已经存储了该数组的大小并简单地访问它。
绝对是O(n)
。来自斯威夫特书:
因此,如果不迭代字符串以确定其扩展字素簇边界,则无法计算字符串中的字符数。如果您正在使用特别长的字符串值,请注意count
属性必须迭代整个字符串中的 Unicode 标量才能确定该字符串的字符。
这有一些影响,其中最大的是整数下标(即str[5]
)无法通过标准库获得。在内部,String
使用 ASCII 或 UTF-16 编码(从 Swift 5 开始,它使用仅限 UTF-8)。如果字符串仅使用 ASCII 字符,则count
can be O(1)
但 ASCII 只有 127 个字符,因此请将此视为例外而不是规则。
NSString
另一方面,始终使用 UTF-16,因此访问其length
is O(1)
。还要记住NSString.length != String.count
(尝试带有表情符号的字符串,您就会看到)。
至于你的第二个问题,它不缓存count
以供后续调用。每次致电count
是这样O(n)
,即使字符串没有改变。中的代码基础回购协议也证实了这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)