LoginSignup
9
6

More than 5 years have passed since last update.

配列の特定要素を抽出するのに for 文の代わりに if 文を使いましょう

Last updated at Posted at 2017-02-17

配列に特定な条件に合う要素を抽出するのに、よく下記のように for 文回してその中に if 文書いて、条件に合う要素があったら早期リターンし、なかったら for 文の外にデフォルト処理書くかと思います

==================追伸==================
コメントのご指摘を見て確かにこの例は contains がそのまま使えてあまりよろしくないなぁと思ってコードをちょっと直した。
==================更に追伸==================
そういえばコメントのご指摘の通り first メソッドがあった。
==================更に追伸終り==================
==================追伸終り==================

let list = ["Apple", "Boy", "Serval Cat"]

func search(for target: String) {

    for item in list {
        if item.lowercased().hasSuffix(target.lowercased()) {
            print("We have a \(item)")
            return
        }
    }

    print("We don't have a \(target)")

}

search(for: "cat") // We have a Serval Cat

でもこの書き方、当たる場合と当たらない場合の処理が違う深さのネストに入ってるし、for 文の中の return に気付かないと for 文の後ろの処理がされない可能性があることに気づかなくてバグの温床になる可能性もあるので、やはり if else 文で回したい。というわけで Sequence を拡張してみた first を使ってみよう

let list = ["Apple", "Boy", "Serval Cat"]

func search(for target: String) {

    if let target = list.first(where: {$0.lowercased().hasSuffix(target.lowercased())}) {
        print("We have a \(target)")

    } else {
        print("We don't have a \(target)")
    }

}

search(for: "cat") // We have a Serval Cat

のように使えます。たーのしー!

9
6
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6