0Pricing
Swift Academy · レッスン

flatMapとチェーン

ネストしたコレクションを平坦化し、変換を連鎖させます。

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

flatMapの2つの役割

シーケンスに対するflatMapは、入れ子を1階層分フラット化します。各要素に対してシーケンスを返すクロージャを適用し、それらのシーケンスをすべて連結して1つの平坦な配列にします。

入れ子の配列を平坦化する

配列の配列を1つの配列に変換します。

let nested = [[1, 2], [3, 4], [5]]
let flat = nested.flatMap { $0 }
print(flat)  // [1, 2, 3, 4, 5]

シーケンスを生成するflatMap

各要素から複数の要素を生成できます。

let nums = [1, 2, 3]
let expanded = nums.flatMap { [$0, $0 * 10] }
print(expanded)  // [1, 10, 2, 20, 3, 30]

すべての組み合わせを作る

flatMapは直積を作るときに便利です。

let suits = ["Hearts", "Spades"]
let ranks = ["A", "K"]
let deck = suits.flatMap { suit in ranks.map { "\($0) of \(suit)" } }
print(deck)  // ["A of Hearts", "K of Hearts", "A of Spades", "K of Spades"]

flatMapとcompactMapの違い

以前はflatMapにもOptionalをアンラップする役割がありましたが、その役割はcompactMapに移りました。現在は次のように使い分けます。

  • flatMap — 入れ子になったシーケンスを平坦化します
  • compactMap — Optionalの結果からnilを取り除きます

単語を文字に分解する

各文字列をその文字に展開します。

let words = ["hi", "yo"]
let chars = words.flatMap { Array($0) }
print(chars)  // ["h", "i", "y", "o"]

サブ結果を結合する

入れ子になったモデルオブジェクトから項目を集めます。

struct Team { let members: [String] }
let teams = [Team(members: ["Ann", "Bo"]), Team(members: ["Cy"])]
let all = teams.flatMap { $0.members }
print(all)  // ["Ann", "Bo", "Cy"]

変換をチェーンする

チェーンの真価は、map、filter、flatMap、reduceを組み合わせたときに発揮されます。上から下へ読むことでデータパイプラインとして理解でき、各ステップが次のステップに新しいシーケンスを渡します。

完全なパイプライン

フィルタリング、平坦化、変換を行ってから、合計します。

let groups = [[1, 2, 3], [4, 5], [6]]
let result = groups
    .flatMap { $0 }
    .filter { $0 % 2 == 0 }
    .map { $0 * $0 }
    .reduce(0, +)
print(result)  // 4 + 16 + 36 = 56

flatMapの後にcompactMapを使う

まず平坦化し、その後でパース可能な値だけを残します。

let rows = [["1", "x"], ["3", "4"]]
let nums = rows
    .flatMap { $0 }
    .compactMap { Int($0) }
print(nums)  // [1, 3, 4]

チェーンを読みやすく保つ

各ステップを独自の行に配置し、チェーンが長くなったら中間結果に名前を付けます。すべてを1つの式に詰め込むより、読みやすさを優先してください。

let names = ["ann", "BO", "cy"]
let titled = names
    .map { $0.lowercased() }
    .map { $0.capitalized }
    .sorted()
print(titled)  // ["Ann", "Bo", "Cy"]

理解度チェック

[[1, 2], [3]].flatMap { $0 }は何を返しますか。

復習

平坦化とチェーンについて学びました。

  • flatMapは入れ子になったシーケンスを1階層分平坦化します
  • Optionalを取り除くには、flatMapではなくcompactMapを使います
  • filter / map / flatMap / reduceをチェーンして、読みやすいパイプラインを構築できます
  • 長いチェーンでは、1ステップを1行にすると明確になります

コース完了です。次は、遅延シーケンスです。

よくある質問

「flatMapとチェーン」レッスンは無料ですか?

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

「flatMapとチェーン」で何を学びますか?

ネストしたコレクションを平坦化し、変換を連鎖させます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「flatMapとチェーン」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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