Swiftでオプショナルな要素を持つ配列をfor文で回すとき、compactMap
してから回すことが多々あると思います。
↓ こういうの
let array: [Int?]
for elm in array.compactMap({ $0 }) {
// do something...
}
ただこれ、compactMapで余計に新しい配列を生成していて割とコストがかかっているのと、for in ...
の部分でTrailing Closureが使えないので文法的にも他部分と整合性が取りにくくなります。
そこでfor case in
文(造語)を使うと割と綺麗に書けます。
let array: [Int?]
for case .some(let e) in array {
// do something...
}
速度の比較をしてみると2倍くらい違うので積極的に使ってい行こう、というメモでした。
let array: [Int?]
let start = Date()
for _ in 0...100 {
for e in array.compactMap({ $0 }) { ... }
}
print(Date().timeIntervalSince(start), "s") // 0.443s
// ----------
let start = Date()
for _ in 0...100 {
for case .some(let e) in array { ... }
}
print(Date().timeIntervalSince(start), "s") // 0.209s