さて、今日はScala言語のMap関数、foreach関数の使い方を学習してみたいと思います。
ぼくも勉強がてらこの記事を書いています。
一緒に勉強していきましょう!
Mapって要は連想配列
まずはMapから!Mapって聞き慣れないのですが、Scalaではよく使う便利な関数みたいで、最初はなんとなく敬遠していました。
が、プログラミング経験者ならなんてことはない。連想配列なんです!
連想配列がわからない人は是非ググってほしいんですが(そういう人はあんまりScalaから始めないと思うけど・・・)、ざっくり言うと、キーと値が対になったセットの固まりです。
下の例を見て下さい。Mapで連想配列を生成して、キー「1つ目」に、「りんご」、キー「2つ目」に「ゴリラ」、キー「3つ目」に「ラッパ」を入れています。
取り出すには、変数名(キー名)です。
object MapTest { def main(args: Array[String]): Unit = { val map = Map("1つ目" -> "りんご", "2つ目" -> "ゴリラ", "3つ目" -> "ラッパ") println(map("1つ目")) println(map("2つ目")) println(map("3つ目")) } }
これを実行してみると、順番にprintされました。とてもカンタンですね。
foreachで連想配列の要素を取り出し
さて、Mapで連想配列を作ったら、その連想配列の要素全部にアクセスするのがforeachです。
連想配列.foreachで中身のkey、valueにアクセスできます。
「_」が各ループの要素を表します。 実物見たほうがわかりやすいので、下の例をどうぞ!
object MapTest { def main(args: Array[String]): Unit = { val map = Map("1つ目" -> "りんご", "2つ目" -> "ゴリラ", "3つ目" -> "ラッパ") map.foreach( println(_) ) } }
実行結果はこちら。
でも、これだと()がついてて今ひとつ使えないですね。
この()のことをタプルと言います。
タプルを取り出すには、「タプル.1」でキーを取り出し、「タプル.2」で値を取り出しになります。
そして、「print(.1)」と書いてみたら怒られました。理由は不明です。。
ですので、次の項目で説明する無名関数を作って、その中で処理をしていこうと思います。
なぜ無名関数を作るかと言うと、foreachの()の中に処理を長々と書くことができないからです。printだったら怒られないんですが。。
foreachの処理に無名関数を書く
さて、ではforeachの処理の中に、print文だけでなく処理を書くための無名関数を追加してましょう。
早速サンプルコードです。
object MapTest { def main(args: Array[String]): Unit = { val map = Map("1つ目" -> "りんご", "2つ目" -> "ゴリラ", "3つ目" -> "ラッパ") map.foreach({ i=> println(i._1) println(i._2) }) } }
foreachの()の中に、{}でくくって処理を書きます。
「i」がここでは、各ループで渡される要素(タプル)を表します。
先程説明したように、タプルは「タプル.1」でキーを取り出し、「タプル.2」で値を取り出しなので、「i.1」、「i.2」となっています。
結果はこんな感じです。キー、値、キー、値、キー、値 と上から6つprintlnされていますね!
簡単な例から進めていきましょう
Scalaの解説ページ、何をググっても理屈っぽくて難しいので、極力簡単な例を出して説明してみました。どうたったでしょう?
Map、foreachなど、連想配列系の処理は多用すると思いますので、まずは基礎からしっかり理解した方がいいでしょう。
ぼくもこのページを見返しながら、実装していきたいと思います。