カテゴリ: Swift 更新日: 2025/12/10

Swiftコレクション操作大全|map・filter・reduce・compactMapの使い方をやさしく解説!

Swift コレクション操作大全|map・filter・reduce・compactMap
Swift コレクション操作大全|map・filter・reduce・compactMap

先生と生徒の会話形式で理解しよう

生徒

「Swiftで、配列の中身をまとめて変換したり、条件に合うものだけ取り出したりってできますか?」

先生

「できますよ。mapfilterreduceといった便利なメソッドを使えば、配列やコレクションを簡単に操作できます。」

生徒

「難しそうに聞こえますが、初心者でも使えますか?」

先生

「もちろんです。やさしい例を交えながら順番に説明していきますね!」

1. mapとは?配列を変換しよう

1. mapとは?配列を変換しよう
1. mapとは?配列を変換しよう

mapは、配列やSetなどのコレクションの中身を1つずつ取り出して、別の形に変換する処理です。

例えば、「2倍にする」「文字を大文字にする」といった処理を一括でできます。


let numbers = [1, 2, 3, 4]
let doubled = numbers.map { $0 * 2 }
print(doubled)

[2, 4, 6, 8]

$0は、「今処理している要素」を意味する省略記法です。

2. filterとは?条件に合うものだけを取り出す

2. filterとは?条件に合うものだけを取り出す
2. filterとは?条件に合うものだけを取り出す

filterは、コレクションの中から「条件に当てはまるものだけ」を取り出す処理です。

例えば、偶数だけを残すといったことができます。


let numbers = [1, 2, 3, 4, 5, 6]
let evens = numbers.filter { $0 % 2 == 0 }
print(evens)

[2, 4, 6]

%」は余りを求める記号で、「2で割って余りが0」という条件は「偶数」を意味します。

3. reduceとは?合計や文字列の連結に便利

3. reduceとは?合計や文字列の連結に便利
3. reduceとは?合計や文字列の連結に便利

reduceは、配列の値を1つに「まとめる」ためのメソッドです。例えば、数の合計や文字列の連結などに使えます。


let numbers = [1, 2, 3, 4]
let total = numbers.reduce(0) { $0 + $1 }
print(total)

10

$0は「これまでの合計」、$1は「今の要素」です。

最初の0は「初期値」で、ここでは最初に0から合計を始めています。

4. compactMapとは?nilを除外して変換

4. compactMapとは?nilを除外して変換
4. compactMapとは?nilを除外して変換

compactMapは、mapと似ていますが、「nil(値がないこと)」を自動的に取り除いてくれる便利なメソッドです。

たとえば、文字列を数字に変換するとき、変換できない文字はnilになりますが、それを自動で除外してくれます。


let strings = ["1", "2", "三", "4"]
let numbers = strings.compactMap { Int($0) }
print(numbers)

[1, 2, 4]

「三」は数字に変換できないのでnilになりますが、compactMapがそれを除外してくれます。

5. map・filter・reduce・compactMapの違いを理解しよう

5. map・filter・reduce・compactMapの違いを理解しよう
5. map・filter・reduce・compactMapの違いを理解しよう

似たような名前で混乱しがちですが、それぞれ役割が違います。

  • map:各要素を変換(加工)する
  • filter:条件に合うものだけを残す
  • reduce:全体をまとめる(合計など)
  • compactMap:変換しつつ、nilを除く

組み合わせるとさらに便利で、たとえば「文字列を数字に変換して合計する」なども簡単にできます。

6. 実用例:filterとmapを組み合わせて使う

6. 実用例:filterとmapを組み合わせて使う
6. 実用例:filterとmapを組み合わせて使う

「3以上の数だけ2倍する」ような複雑な操作も、filtermapを組み合わせれば簡単です。


let numbers = [1, 2, 3, 4, 5]
let result = numbers.filter { $0 >= 3 }.map { $0 * 2 }
print(result)

[6, 8, 10]

まずfilterで3以上を抽出し、次にmapで2倍にしています。

7. 使い分けに困ったら?考え方のヒント

7. 使い分けに困ったら?考え方のヒント
7. 使い分けに困ったら?考え方のヒント

どのメソッドを使うべきか迷ったら、「やりたいこと」で分けて考えるとわかりやすいです。

  • 変換したい → map
  • 取り除きたい → filter
  • 集計したい → reduce
  • 変換&nilを除外したい → compactMap

これらはSwiftでよく使われる基本中の基本なので、最初にしっかり覚えておくと、今後のプログラミングがとてもスムーズになります。

まとめ

まとめ
まとめ

Swiftのコレクション操作におけるmapfilterreducecompactMapは、配列を柔軟に扱うための非常に重要な機能です。これらのメソッドを正しく理解し使いこなすことで、配列の変換、条件抽出、集計、不要な値の除外など、多様な処理を短く読みやすいコードで実現できます。配列やリストなどのコレクション操作は、Swiftだけでなくプログラミング全般において頻繁に登場するため、これらのメソッドを深く理解することでコードの品質や保守性は大幅に向上します。 とくにmapは「要素を変換する」という場面で最も多く使われます。データ加工や表示形式の変更などさまざまな応用が可能で、コレクションの各要素へ一括して処理を施したいときに大きな力を発揮します。filterは条件に合う値だけを残すという直感的で便利な機能で、特定の値の抽出、検索結果の絞り込みなど幅広い用途に活かせます。さらにreduceは値をひとつにまとめる処理に特化しており、合計や結合のような集計処理を簡潔なコードで記述できます。そしてcompactMapは、mapによる変換とnil除外を同時に行えるため、データ変換時の安全性を高めるうえで欠かせない便利なメソッドです。 また、これらのメソッドは組み合わせることでさらに強力な処理が書ける点も魅力です。「条件に合うものだけ変換する」「変換した後に合計する」といった工程をひとつの流れで記述でき、コードはより自然で読みやすくなります。プログラミングに慣れないうちは難しく感じるかもしれませんが、実例を通してイメージしながら学ぶことで、どのメソッドがどの場面で活躍するのか直感的に理解できるようになります。以下には今回の理解を深めるためのサンプルコードを載せ、一連の処理の流れをより具体的に捉えられるようにしています。

サンプルプログラム:map・filter・reduce・compactMapを組み合わせた処理例


let items = ["1", "二", "3", "4", "五", "6"]

let numbers = items
    .compactMap { Int($0) }
    .filter { $0 >= 3 }
    .map { $0 * 2 }

let total = numbers.reduce(0) { $0 + $1 }

print(numbers)
print("合計は\(total)です")

このサンプルでは、文字列の配列から数字へ変換し、nilとなる値を除外するためにcompactMapを使用しています。その後、3以上の数字だけを絞り込んでfilterし、2倍に変換するためにmapを用いています。最終的にreduceで合計値を求め、結果をひとつにまとめています。このようにメソッドをつなげて処理を書くことで、直感的で分かりやすく、かつ柔軟性の高いコレクション操作が実現できます。 Swiftのコレクションメソッドは、実務のアプリケーション開発でも頻繁に利用されるため、今回のような使い分けや特徴を理解しておくことが、今後の開発スキルの基盤となります。特にmapやfilterのような処理は、UI更新、データ加工、APIレスポンス整形など多くの場面で広く活躍するため、自然に使いこなせるようになるとコード全体がすっきりと整理されたものになります。これらの積み重ねがSwiftの力を引き出し、効率的で読みやすいロジックへと繋がります。

先生と生徒の振り返り会話

生徒

「mapとfilterはよく見かけていましたが、実際にはこんなに応用できるんですね!」

先生

「そうなんだよ。コレクション操作は慣れるととても強力になるし、コードをきれいに保つ大きな助けにもなるよ。」

生徒

「compactMapでnilが自動で除外されるのは便利ですね。データ変換がとても楽になります!」

先生

「うん。安全性や柔軟性の面でも重宝されるメソッドだね。reduceの使い方も覚えておくと、集計処理が簡単に書けるようになるよ。」

生徒

「map・filter・reduce・compactMapを組み合わせると、複雑な処理も自然に書けるんだと実感しました!」

先生

「その通り。組み合わせ方を工夫することで、どんなデータでも思い通りに扱えるようになるよ。これからのSwift学習でも何度も役に立つ考え方だから、大切にしていってね。」

関連記事:
カテゴリの一覧へ
新着記事
Go言語の構造体でインターフェースを実装する方法を初心者向けにやさしく解説!
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
Go言語のエラーと例外の違いを初心者向けに整理!わかりやすく解説
人気記事
No.1
Kotlin・Go・Swift記事の人気No1
Swiftのwhile文とrepeat while文を完全マスター!初心者にもわかる繰り返し処理の使い方と違い
No.2
Kotlin・Go・Swift記事の人気No2
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.3
Kotlin・Go・Swift記事の人気No3
Swift入門ガイド|基本構文と書き方をマスターしよう
No.4
Kotlin・Go・Swift記事の人気No4
Kotlinの正規表現(Regex)の使い方をやさしく解説!文字列操作の基本を初心者向けに学ぼう
No.5
Kotlin・Go・Swift記事の人気No5
Kotlinのコンパニオンオブジェクトとは?初心者向けに使い方と役割をわかりやすく解説!
No.6
Kotlin・Go・Swift記事の人気No6
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.7
Kotlin・Go・Swift記事の人気No7
Kotlinのwhen式を完全ガイド!初心者でもわかるパターンマッチング的な使い方
No.8
Kotlin・Go・Swift記事の人気No8
Kotlinのコーディング規約(公式スタイルガイド)とは?読みやすいコードを書くための基本ルール