Menu
Coddy logo textTech

Map

CoddyのSwiftジャーニー「ロジックとフロー」セクションの一部 — レッスン 23/56。

mapはクロージャを受け取り、それをすべての要素に適用して、結果の新しい配列を返します。新しい配列は、元の配列と同じ長さになります。

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

$0 はクロージャの最初のパラメータの短縮形です。短縮しない形式では、パラメータ名と戻り値の型を明示します:

let doubled = nums.map { (n: Int) -> Int in
    return n * 2
}

map は要素の型を変更することもできます。String を返すクロージャを通じて [Int] をマッピングすると、[String] が得られます。

let labels = nums.map { "#\($0)" }
print(labels)                // ["#1", "#2", "#3", "#4"]
challenge icon

チャレンジ

簡単

1行の入力を読み込みます。カンマ区切りの整数のリスト(華氏温度)です。

それぞれの値を、整数演算(0への切り捨て、小数点なし)の公式 C = (F - 32) * 5 / 9 を使用して摂氏に変換します。以下の内容を別々の行に出力してください:

  1. 摂氏温度を , で繋いだもの
  2. 各温度に対して F=<f> C=<c> という形式のラベルを ; で繋いだもの

両方の行で map を使用してください。

入力が 32,212,98,0 の場合、出力は以下のようになります:

0,100,36,-17
F=32 C=0;F=212 C=100;F=98 C=36;F=0 C=-17

チートシート

mapは、すべての要素にクロージャを適用し、同じ長さの新しい配列を返します:

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

$0は、クロージャの最初のパラメータの短縮形です。明示的な形式は以下の通りです:

let doubled = nums.map { (n: Int) -> Int in
    return n * 2
}

mapは要素の型を変更することができます(例:[Int][String]):

let labels = nums.map { "#\($0)" }  // ["#1", "#2", "#3", "#4"]

自分で試してみよう

let f = readLine()!.components(separatedBy: ",").map { Int($0)! }

// TODO: 1行目 = ","で結合された摂氏
// TODO: 2行目 = ";"で結合されたラベル "F=<f> C=<c>"
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン