【发布时间】:2020-10-11 18:56:32
【问题描述】:
Swift 提供了一种 for-in 风格的 for 循环来替代 C 风格的 for 循环。我们也可以在Range 和ClosedRange 中使用这种for-in 循环。
for i in 0..<100 {
// do something.
}
但是,在使用带范围的 for-in 循环时会出现一些性能问题,尤其是当存在嵌套的 for 循环时。
我用XCTestmeasure测试了三种循环:
- for-in 循环与
ClosedRange - for-in 循环与
Range - while 循环
final class LeetcodeSolutionsTests: XCTestCase {
var count: Int = 1000
func testForInClosedRange() {
// Time: 1.016 sec
measure {
for i in 1...count {
for j in 1...count {
let _ = i + j
}
}
}
}
func testForInRange() {
// Time: 0.542 sec
measure {
for i in 1...count {
for j in 1..<(count + 1) {
let _ = i + j
}
}
}
}
func testWhile() {
// Time: 0.015 sec
measure {
for i in 1...count {
var j = 1
while j < count + 1 {
let _ = i + j
j += 1
}
}
}
}
}
从示例中,Range 的 for-in 循环比 ClosedRange 的 for-in 循环快 2 倍。并且while循环比它们都快很多。
我猜 for-in 循环会做一些额外的工作,而且会有一些细微的性能差异是有道理的。我没想到的是性能差异如此之大。
【问题讨论】:
标签: swift