← 解説「map・filter・collect — 変換パイプライン」に戻る
サンプルコードで身につける: map・filter・collect — 変換パイプライン
解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。
1map で全要素を変換する
map にクロージャを渡して全要素を2倍にし、collect で Vec に集める最小のパイプラインです。「各要素に同じ変換を適用する」をループと一時変数なしで書けています。collect の結果は型注釈 Vec<i32> で受けるのが定番です。
Rust
2filter で条件に合う要素だけ残す
filter は条件式が true の要素だけを通します。iter() は参照を取り出すので、クロージャの中では *n のように参照を外して比較し、集める型も Vec<&i32> になる点がつまずきどころです。「残すかどうか」を決めるだけで要素自体は変換しない、という map との役割の違いを確認してください。
Rust
3map と filter をつなげる
全員に5点のボーナスを加点(map)してから、60点以上だけを残す(filter)というパイプラインです。処理の順番がそのままメソッドの並び順になるので、仕様を上から読むようにコードが読めます。「変換してから絞り込む」は実務のデータ加工で最頻出の組み合わせです。
Rust
4パイプラインの終端を sum にする
パイプラインの最後は collect だけでなく、前レッスンで学んだ sum などの消費メソッドでも締められます。「各商品を税込価格に変換して、その合計を出す」が1行で書け、途中の Vec を作る必要もありません。集計とセットになったデータ変換の実務的な形です。
Rust
5構造体のリストを絞り込んで整形する
ユーザー一覧から成人だけを filter で絞り込み、map で表示用の文字列に整形して collect でまとめる例です。「データのリストを条件で絞って表示用に変換する」のは、画面表示やレポート生成など実務アプリの中心的な処理です。フィールドへのアクセスもクロージャの中でそのまま書けます。
Rust