
「filter { $0.contains(...) } ってどういう意味?」
一見、記号だらけでわかりにくいですが、実はとっても便利で使いやすい書き方なんです。
この記事ではSwift初心者の方にもわかるように.filter { $0.contains(...) }
の意味・使い方・具体例を丁寧に解説していきます!
filter { $0.contains(...) } ってなに?
filter { $0.contains(...) }
はある配列から特定の条件に合う要素だけを取り出す方法です。
具体的には:
.filter { ... }
:配列の中身を1つずつチェックして、条件に合うものだけを残す$0
:今チェックしている要素(1つ目、2つ目、3つ目…)を指すcontains(...)
:その要素の中に指定した文字列や値が含まれているかどうかを判定
つまり、.filter { $0.contains("a") }
なら、「aを含む要素だけ残す」という意味になります。
具体例①:文字列配列から「Swift」を含む要素を絞る
タイトルの一覧を格納した配列から「Swift」という文字が含まれているものだけをピックアップしたいときの例です。
1 2 3 4 5 6 7 | let titles = ["Swift入門", "iOS開発", "SwiftUI基礎", "Xcodeガイド"] let swiftItems = titles.filter { $0.contains("Swift") } print(swiftItems) // → ["Swift入門", "SwiftUI基礎"] |
具体例②:検索ワードに一致するフルーツ名を抽出
ユーザーが「ん」という文字を入力したとき、それを含む果物の名前だけを表示するような検索機能を想定しています。
1 2 3 4 5 6 7 8 | let fruits = ["りんご", "みかん", "バナナ", "ぶどう", "パイナップル"] let keyword = "ん" let result = fruits.filter { $0.contains(keyword) } print(result) // → ["りんご", "みかん", "バナナ"] |
具体例③:「Ta」を含む名前だけを取り出す部分一致フィルタ
「Ta」という文字列を含んでいる名前を抽出したいときの例です。
1 2 3 4 5 6 7 | let names = ["Taro", "Tarou", "Hanako", "Tatsuo"] let result = names.filter { $0.contains("Ta") } print(result) // → ["Taro", "Tarou", "Tatsuo"] |
どんなときに使う?
filter { $0.contains(...) }
は下記のような場面で使います。
- 検索ワードを含むアイテムを抽出したいとき(文字列のあいまい検索)
- 特定のタグやキーワードが含まれるデータだけを取り出したいとき
- データの中から条件に合うものだけを表示したいとき(例:商品一覧、チャット履歴など)
書き方のポイント:$0 ってなに?
$0
は配列の中で今1つずつ取り出されている要素を表す省略記法です。
Swiftでは、クロージャ(中カッコ { }
の中の処理)に渡ってくる値に名前をつけなくても、自動的に $0
, $1
, $2
… のように順番で使えるようになっています。
たとえば、次のコードを見てください:
1 2 3 4 | let fruits = ["りんご", "バナナ", "みかん"] let result = fruits.filter { $0.contains("ん") } |
このときの $0
は、順番に "りんご" → "バナナ" → "みかん" という文字列が入ると考えてOKです。
つまり、このコードはこう動いています:
$0 = "りんご"
→ "ん" を含む → 残す$0 = "バナナ"
→ "ん" を含まない → 除外$0 = "みかん"
→ "ん" を含む → 残す
結果:
1 2 | ["りんご", "みかん"] |
名前をつけた書き方との比較
同じ処理を$0
を使わずに書くこともできます:
1 2 3 4 | let result = fruits.filter { fruit in fruit.contains("ん") } |
こちらは $0
に代わって fruit
という名前を明示しています。
両方のコードとも、「"ん" を含む果物名だけを取り出す」処理ですが、
Swiftに慣れている人は $0
をよく使い、初心者やチーム開発では fruit in
の方が読みやすいことが多いです。
まとめ
.filter { ... }
は、配列から条件に合う要素だけを取り出す$0.contains("文字列")
は要素の中に指定した文字列が含まれているかどうかを調べる- 「〇〇を含む要素だけほしい!」というときに超便利
- 検索・絞り込み・タグ機能など、実用シーンも豊富!
$0
は今見ている1つの要素を指す省略記法
この .filter { $0.contains(...) }
を覚えると検索機能や絞り込み機能が簡単に作れるようになります。