LoginSignup
8
8

More than 5 years have passed since last update.

mapの使い方

Last updated at Posted at 2015-03-20

前回は「filterの使い方」を書きました。
今回はmapの使い方を書きます。

mapは配列の各要素に関数を適用し、その結果からなる新しい配列を返す関数です。

["鳥", "花", "車"]という文字列の配列から青い鳥と青い花と青い車という文字列を組み立てるコードを書いていきます。

for in文を使った場合です。

sample1.swift
var result = ""
for element in ["鳥", "花", "車"] {
  if result != "" {
    result += "と"
  }
  result += "青い" + element
}
println(result)

実行結果は青い鳥と青い花と青い車となります。

次にmapを使います。
ドキュメントを読むと、func map<U>(transform: (T) -> U) -> [U]とあります。
TとUは型を示します。今回の場合はどちらともStringとなります。

このとおり書き換えると次のようになります。

sample2.swift
println(join("と", ["鳥", "花", "車"].map({(element:String) -> String in return "青い" + element})))

1行になりました。

コードを分解してみてみます。
["鳥", "花", "車"].map({(element:String) -> String in return "青い" + element})
この実行結果は、[青い鳥, 青い花, 青い車]となります。次にjoinで配列を連結します。

filterのときと同様に$0を使って短く書くことができます。

sample3.swift
println(join("と", ["鳥", "花", "車"].map{ "青い" + $0}))

数値の配列でも同様の処理ができます。

sample4.swift
println([100, 200, 300].map{Int($0 * 1.08)}) // [108, 216, 324]

最後にTとUの型が異なる場合、例えばStringからIntに変換するコードを書いてみます。
男性だったら1に、女性だったら2に変換する例です。
このような文字列から定義された数値に変換する場面はよくあると思います。

sample5.swift
println(["男性", "女性", "女性", "男性", "男性"].map{$0 == "男性" ? 1 : 2}) // [1, 2, 2, 1, 1]
8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8