Scalaでmapを使う方法【初心者向け】

プログラミング初心者向け、Scalaでmapを使う方法を解説。mapの特徴・使い方(格納方法・文法)・書き方(immutableとmutableの動作比較)についてわかりやすく説明しています。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

今回は、Scalaでmapを使う方法を解説します。

Scalaについてそもそもよく分からないという方は、Scalaとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのScalaオンライン講座の内容をもとに作成しています。

 

田島悠介

今回は、Scalaに関する内容だよ!

大石ゆかり

どういう内容でしょうか?

田島悠介

matchの使い方と書き方について詳しく説明していくね!

大石ゆかり

お願いします!

 

Scalaのmapとは

Scalaのmapとは配列のひとつです。

他のプログラミング言語では辞書式と呼ばれることもあります。

配列とはプログラミングで一般的に使用される仕組で、同じ型の変数を1つにまとめて扱うことができます。

変数とは、値を入れる箱のようなものです。

Scalaのmapとしては、値を変更可能なmutableなmapと、値を変更不可能な不変オブジェクトであるimmutableタイプの2種類があります。

Scalaの配列で値を変更可能なオブジェクトとしてはarrayがあります。

また、Scalaの配列で不変オブジェクトとしてはlist があります。

 

Scalaのmapの使い方

Scalaのmapはタプルで値を渡すことで生成することができます。 タプルとは、複数の異なる型 を格納できます。

基本の格納方法

文法

Map(キー1->バリュー1, キー2->バリュー2)

解説

1行目のMap(キー1->バリュー1, キー2->バリュー2)の説明です。

Mapでmapを生成することの宣言をしています。 キー1->バリュー1の部分では、キー1に対応するバリューがバリュー1に格納される処理です。 ->を使用して格納するようにしています。

 

[PR]Scalaで挫折しない学習方法を動画で公開中

Scalaのmapを実際に書いてみよう

immutable(変更不可能)なmapとmutable(変更可能)なmapの動作比較

ソースコード

import scala.collection.mutable
object Main extends App {
  val m1 = Map("A" -> 1, "B" -> 2, "C" -> 3)
  println(m1)
  m1.updated("B", 4)
  println(m1)
  val m2 = mutable.Map("A" -> 1, "B" -> 2, "C" -> 3)
  println(m2)
  m2("B") = 5
  println(m2)
}

表示結果

Map(A -> 1, B -> 2, C -> 3)
Map(A -> 1, B -> 2, C -> 3)
Map(A -> 1, C -> 3, B -> 2)
Map(A -> 1, C -> 3, B -> 5)

解説

1行目の、import scala.collection.mutableでは、scala.collection.mutableをインポート(import)指定することでmutableタイプのmapを使用する準備をします。

mutableは7行目で使用します。

2行目の、object Main extends App {では、ScalaのAppという機能をextend(継承し再利用)してMainという名前のObject(オブジェクト)を宣言しています。

3行目の、val m1 = Map(“A” -> 1, “B” -> 2, “C” -> 3)では、Mapを使用して”A” -> 1, “B” -> 2, “C” -> 3というオブジェクトを格納しています。

その後、変数m1に代入しています。

4行目の、println(m1)では、3行目の代入結果の変数m1を表示しています。

表示結果は、Map(A -> 1, B -> 2, C -> 3)です。

5行目の、m1.updated(“B”, 4)では、変数m1に入っている、immutableタイプのキーがBとなっている2というバリューを4というバリューに変更しようとしています。

6行目の、println(m1)では、変数m1を表示しています。

表示結果は、Map(A -> 1, B -> 2, C -> 3)となり、4行目の結果と同じです。

これは、変数m1がimmutableタイプのMapであるためです。

7行目の、val m2 = mutable.Map(“A” -> 1, “B” -> 2, “C” -> 3)では、3行目と同様にオブジェクトを変数2に代入しています。

ここでは、mutableを使用して、オブジェクトを変更可能な状態のMapとして格納している点が異なります。

8行目の、println(m2)では、変数m2を表示しています。

表示結果は、Map(A -> 1, C -> 3, B -> 2)となります。

表示結果が7行目の代入とは異なるのは、Mapでは、キーとバリューの組み合わせを、どの順番に入れるかまでは担保されません。

その為、表示した場合キーとバリューの組み合わせは格納時と同じですが、出力される順番は違うこともあります。

9行目の、m2(“B”) = 5では、変数m2に入っている、mutableタイプの、キーがBとなっている2というバリューを5というバリューに変更しようとしています。

10行目の、println(m2)では、変数m2を表示しています。

今回は、キーばBのバリューの2を5に変更したので、表示結果は、Map(A -> 1, C -> 3, B -> 5)となります。

11行目の、}では、2行目の処理を終了しています。

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

今回は、Scalaでmapを使う方法を解説しました。

 

オンラインのプログラミングスクールTechAcademyでは、Scalaオンライン講座を開催しています。

Scalaを使ってWebアプリケーションを開発することができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。

この記事を監修してくれた方

中本賢吾(なかもとけんご)
アジマッチ有限会社 代表取締役社長

開発実績:PHPフレームワークを利用した会員制SNS・ネットショップ構築、AWSや専用サーバー下でLinuxを使用したセキュアな環境構築、人工知能を利用したシステム開発、店舗検索スマホアプリ開発など。

その他にも地域の職業プログラマー育成活動を行い、2018年には小学生がUnityで開発したオリジナルAndroidアプリをGooglePlayでリリース。ゲームで遊ぶより作ろうぜ!を合言葉に、小学生でも起業できる技術力を育成可能で有ることを証明し続けている。