我想这是一个必须要求每种语言的问题,但是当你写作例如:
while i < array.count {
...
}
Run Code Online (Sandbox Code Playgroud)
确实array.count每个循环运行时间得到评估?let在运行这样的循环之前将它存储在常量中是否更好?
let length = array.count
while i < length {
...
}
Run Code Online (Sandbox Code Playgroud)
Array获取count属性,因为它符合Collection。对于文档count的Collection状态
复杂度:O(1) 如果集合符合 RandomAccessCollection;否则,O(n),其中 n 是集合的长度。-来源
由于Array也符合RandomAccessCollection,所以获取数组的计数是一个常数时间操作。在开始时获取一次与每次循环迭代之间不应该有任何重大的性能差异。
while循环(和do while循环)在每次迭代时都会对其谓词进行求值.
for 循环评估序列一次.
这是一个演示:
var array: [Int]
print("Test Case 1 - while i < array.count")
array = [1, 2, 3, 4, 5, 6]
var i = 0
while i < array.count {
print(array[i])
if i < 3 { array.append(123) }
i += 1
}
print("\r\nTest Case 2 - for i in array.indices")
array = [1, 2, 3, 4, 5, 6]
for i in array.indices {
print(array[i])
if i < 3 { array.append(123) }
}
print("\r\nTest Case 3 - for i in 0 ..< array.count")
array = [1, 2, 3, 4, 5, 6]
for i in 0 ..< array.count {
print(array[i])
if i < 3 { array.append(123) }
}
Run Code Online (Sandbox Code Playgroud)
测试用例1 - 当我<array.count
1
2
3
4
五
6
123
123
123
测试用例2 - 对于array.indices中的i
1
2
3
4
五
6
测试用例3 - for i in 0 .. <array.count
1
2
3
4
五
6
| 归档时间: |
|
| 查看次数: |
816 次 |
| 最近记录: |