0Pricing
Swift Academy · レッスン

mapとcompactMap

要素を変換し、nilを取り除きます。

「mapとcompactMap」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

mapとは何ですか

mapは高階関数です。クロージャを受け取り、シーケンスの各要素に適用して、変換結果からなる新しい配列を返します。

  • 元のコレクションは変更されません
  • 結果の要素数は常に入力の要素数と同じです
  • 要素の型は変わることがあります(例:Int → String)

mapの基本

配列内のすべての数値を2倍にします。

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

要素の型を変更する

mapを使うと、Intの値をStringの値に変換できます。

let ids = [10, 20, 30]
let labels = ids.map { "ID-\($0)" }
print(labels)  // ["ID-10", "ID-20", "ID-30"]

名前付き関数を使うmap

末尾クロージャだけでなく、シグネチャが一致する任意の関数を渡せます。

let words = ["swift", "map"]
let upper = words.map { $0.uppercased() }
print(upper)  // ["SWIFT", "MAP"]

mapでは解決できない問題

mapはすべての要素を保持します。変換処理がOptionalを返す場合(失敗する可能性がある場合)、[Int?]のようなOptionalの配列になり、後で取り除かなければならないnilの穴がたくさん残ります。

まさにこの問題を解決するのがcompactMapです。

compactMapの登場

compactMapは各要素を変換し、結果がnilの場合はその結果を取り除いて、Optionalではない配列を返します。

let raw = ["1", "2", "x", "4"]
let nums = raw.compactMap { Int($0) }
print(nums)  // [1, 2, 4]  -- "x" was dropped

mapとcompactMapの比較

違いは、nilの結果を残すかどうかです。

let raw = ["1", "x", "3"]
print(raw.map { Int($0) })       // [Optional(1), nil, Optional(3)]
print(raw.compactMap { Int($0) }) // [1, 3]

コレクション内のOptionalをアンラップする

Optionalの配列からnilを取り除くには、compactMapを使うのが慣用的な方法です。

let maybe: [Int?] = [1, nil, 3, nil, 5]
let clean = maybe.compactMap { $0 }
print(clean)  // [1, 3, 5]

compactMapによるパース

よくある実用例として、入力から有効な行だけをパースします。

let lines = ["42", "", "hello", "7"]
let values = lines.compactMap { Int($0) }
print(values)      // [42, 7]
print(values.reduce(0, +))  // 49

mapとcompactMapの組み合わせ

mapでデータの形を整え、compactMapで成功した結果だけを残すというように、チェーンできます。

let scores = ["90", "85", "n/a", "70"]
let passed = scores
    .compactMap { Int($0) }
    .map { $0 >= 80 ? "pass" : "fail" }
print(passed)  // ["pass", "pass", "fail"]

OptionalチェーンでのcompactMap

Optionalのプロパティアクセスとの組み合わせも効果的です。

struct User { let name: String? }
let users = [User(name: "Ann"), User(name: nil), User(name: "Bo")]
let names = users.compactMap { $0.name }
print(names)  // ["Ann", "Bo"]

理解度チェック

要素を変換し、nilの結果を1つの処理で取り除く関数はどれですか。

復習

2つの基本的な変換関数を学びました。

  • map — すべての要素を変換し、結果の要素数は入力と同じです
  • compactMap — 要素を変換してnilを取り除きます。パースやOptionalのアンラップに適しています
  • どちらも新しい配列を返し、元の配列を変更しません
  • チェーンして、データの形を整えてからきれいに絞り込めます

次は、述語を使ったフィルタリングです。

よくある質問

「mapとcompactMap」レッスンは無料ですか?

はい。「mapとcompactMap」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「mapとcompactMap」で何を学びますか?

要素を変換し、nilを取り除きます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「mapとcompactMap」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. mapとcompactMap
  2. filterと述語
  3. reduceとreduce(into:)
  4. flatMapとチェーン
← Swift Academyに戻る