Swift-我应该创建字符串“ count”的局部变量吗?

问题描述 投票:0回答:1

如果我在一个函数中多次使用字符串'count',这很重要。也就是说,Swift在第一次计算完“ count”后是否会对其进行缓存。以下是两个示例,请问我使用哪一个?我认为第二个绝对可以,但是第一个呢?我一直都在看示例代码,就像第一个一样。

func Foo1 (str: String) {
...
// calling str.count twice
if x < str.count && y < str.count {
...
}

func Foo2 (str: String) {
...
// calling str.count once
let c = str.count
if x < c && y < c {
...
} 
swift string count swift5
1个回答
0
投票

[.countCollection协议定义,具有以下复杂性:

复杂度:O(1),如果集合符合RandomAccessCollection;否则为O(n),其中n是集合的长度。

String不是RandomAccessCollection。这是一个BidirectionalCollection,所以它不会保证O(1)。它只承诺O(n)。

它绝对不承诺任何缓存(并且您不应期望任何缓存)。

碰巧的是,在很多(可能是大多数)情况下,String的计数都被缓存了。它是_StringObject的一部分,是低级存储抽象的一部分,并且通常由优化器内联。但这都不是保证。

就是说,除非您期望String非常大(至少10kB,甚至可能更多),否则很难想象这是一个紧密的瓶颈,因为它在紧密循环外被两次调用。与大多数事情一样,您应该清楚地写出然后进行简要介绍。为了清楚起见,我可能会创建一个额外的变量,但是您在这里不要过多猜测。写清楚。然后进行配置。

您是否正在使用特别大的字符串?

© www.soinside.com 2019 - 2024. All rights reserved.