[Swift] .filter{ }.firstのパフォーマンスについて
背景
最近データを取得してきて、その中で条件に合う要素を取り出したい
みたいなことがよくあり、実際にやり方をググってみるとfilter{}.firstという構文を見つけました。
しかし、SwiftLintを導入しているプロジェクトでしたので、下記の警告が吐かれてしまいました。
First Where Violation: Prefer using `.first(where:)` over `.filter { }.first` in collections. (first_where)
これは警告文のところだけ訳すと、
`.filter { }.first` よりも `.first(where:)` を使用することを推奨します。
まさに、直接的にfilter{}.firstはよくないからfirst(where:)を使ってねと教えてくれます。(SwiftLintは優秀ですね。。)
どうやらfilter{}.firstは条件に合致するデータを見つけても配列を最後までなめてしまうようです。
これはコーディング上あまりいいコードとは言えません。
処方箋
ではどのようにして実装すれば良いのでしょう。
警告でもあるように推奨してくれているfirst(where:)
という構文を使用します。
実際に実装してみます。
before
let hoge: [String] = ["aaa", "bbb", "ccc", "ddd"]
let foo = hoge.filter({ $0.hasPrefix("b") }).first // foo == "bbb"
after
let foo = hoge.first(where: { $0.hasPrefix("b") }) // foo == "bbb"
beforeの方がコードの読みやすさを感じる方もいるかもしれませんが、
afterの方が何よりパフォーマンスが良いので積極的に使っていきましょう。
Author And Source
この問題について([Swift] .filter{ }.firstのパフォーマンスについて), 我々は、より多くの情報をここで見つけました https://qiita.com/pecoms/items/08918d81c7667adc2484著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .