"まだ"の力 [Swift]基礎辞書

学んだことを書いていきます。質問やエラーなどございましたらお気軽にコメントお願いします。

特有の関数? mapとは?$0とは?

最近swiftで競技プログラミングに手を出し始めてアプリを作る時には出てこなかったような関数を見かけたのでその使い方についてまとめました!

mapとは?$0とは?

題名にも書きましたがmapとは何か?

そしてmapを見かける時は当然のように$0が使われています。

ですので今回はこの二つに焦点を絞ってみていきます!

※今回取り扱うのは配列のmapの使い方です。






今回は下記の解説をさらに詳しくまとめていきます。


Swiftのmap, filter, reduce(などなど)はこんな時に使う!
http://qiita.com/motokiee/items/cf83b22cb34921580a52

まずはこのサイトのmapの部分を一読してください。



よろしいですか?









では解説していきます。

mapとは

mapは全要素に処理を適用したい時に使う!

let array = [1,2,3,4,5]
let newArray = array.map { $0 * 5 }
newArray

上記の解説でも取り扱われていましたこちらのコードは各要素を5倍した新しい配列newArrayをmapで生成しています。


この$0とはなんでしょう?

これにについて理解していきます。


元をたどるとクロージャの引数を省略するときに使うコードです。


こちらもクロージャについてわかりやすく書いてあるので読んでみましょう。
$0を理解するのみなので下記のサイトの⑤まで読めばOKです。
http://hajihaji-lemon.com/smartphone/swift/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/




まとめるとこんな感じ

基本的なクロージャ
f:id:kichie_com:20170201192126p:plain


処理が1文ならばreturnを省略できる
f:id:kichie_com:20170201192202p:plain


処理が1文ならば戻り値の型も省略できる
f:id:kichie_com:20170201192215p:plain


型がわかっていれば型も省略できる
f:id:kichie_com:20170201192222p:plain


引数が1つであれば引数のカッコも省略できる(宣言の方はできないみたい)
f:id:kichie_com:20170201192233p:plain


引数にこだわりがなければ省略できる(この時第一引数を$0第二引数を$1のように書く)
f:id:kichie_com:20170201192246p:plain


そして宣言を消して出来上がり!
f:id:kichie_com:20170201192315p:plain


以上で$0は理解できたんじゃないかなと思います。





では最初に戻りましょう。

let array = [1,2,3,4,5]
let newArray = array.map { $0 * 5 }
newArray

これを読んでみると

array.map { $0 * 5 }
array arrayという配列の
map 一つ一つの要素にアクセス
{$0 * 5} 要素を第一引数として5倍した

解説は以上です!











まとめ


mapとは?
配列の全要素を使いたいときに使う関数



$0とは?
$0とはクロージャの第一引数を表す記号