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 droppedmapと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, +)) // 49mapと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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- mapとcompactMap
- filterと述語
- reduceとreduce(into:)
- flatMapとチェーン