【第15章】MapとMutableMapについて詳しく解説

【第15章】マップとミュータブルマップについて詳しく解説 基礎勉強
スポンサーリンク
リンコ
リンコ

こんにちは!リンコですピヨ!この記事では自分の勉強の復習もかねて、KotlinでのMapとMutableMapについて詳しく勉強していくピヨ!

この第15章では、プログラミング言語であるKotlinのMapとMutableMapについて、一緒に勉強していきましょう。

この記事を読めばプログラミング未経験の方も、Kotlin入門レベルのMapとMutableMapについて1つ1つ理解しながら勉強できると思うので、是非最後まで読んで頂ければと思います。

※この記事で出てくる「サンプルコード」は、記述が長く画面からはみ出ている場合がありますが、横にスライドすると表示されるのでご安心ください。

スポンサーリンク

【Kotlin】Map(マップ)とは?

Map(マップ)とは?

Kotlinの「Map」とは、どういった時に使う処理なんでしょうか?まずは、Mapがどういった処理を行うものなのかを勉強していきましょう。

セットと同じで高速検索機能がついている

マップも「コレクション」の1つで、セットに似た高速検索機能を持っているコレクションです。

セットと同じように「ハッシュ値」を使うので、マップを使ったキーワード検索は高速になります。

値の追加や削除ができない

マップもリストやセットと同じで、値の追加や削除ができません

値の追加や削除をしたい場合は、この記事の後半で勉強するミュータブルマップを使います。

キーワードと値のペアでデータを格納する

マップは「キーワードと値の2つのデータをペアにして格納したり参照したりする」ことができます。

いわば「辞書」のようなデータ構造をしています。

辞書のように「キーワード」と「キーワードに紐づけされた値」をペアで保管しておくことができる便利なコレクションになります。

リンコ
リンコ

マップはキーワードとキーワードに紐づけられた値をペアで保管するコレクションピヨ!

【Kotlin】Map(マップ)の使い方

Map(マップ)の使い方

マップについて簡単に理解したところで、実際にマップの使い方、記述の仕方を勉強していきましょう。

Mapの書式

マップを使う場合の書式は以下になります。マップの記述も前章と同様で基本の記述の仕方がありますが、省略もできるので両方の書式を載せておきます。

// 通常のリストの書式
val マップ名: Map<型名, 型名> = mapOf(キーワード1 to 値1, キーワード2 to 値2, キーワード3 to 値3...)
// 省略したリストの書式
val マップ名 = mapOf(キーワード1 to 値1, キーワード2 to 値2, キーワード3 to 値3...)

このように、マップに格納するデータは「キーワードと値の間にtoを入れる」ようにしていきます。

また複数のデータをマップに格納する際はデータの間に「,」を入れて区切るようにします。

ちなみにこのキーワードのことをプログラマーの中では「キー」と呼びます。

Mapの値を取り出す際の書式

またマップの値を取り出す際の書式は以下になります。

マップ名[キーワード]

マップは順序付きコレクションではないため、値を取り出す際にインデックス番号は指定できません。変わりに「[]」でキーワードを囲って指定するようにします。

リンコ
リンコ

値を取り出す際は「[]」でキーワードを囲って指定するピヨ!

Mapを使ったコードを記述してみよう

では実際にMapを使ったコードを記述してみましょう。

サンプルコード

以下のサンプルコードでは、String型の果物の英単語と日本語をペアにしてマップに格納しています。

val fruit = mapOf("banana" to "バナナ", "apple" to "リンゴ", "pineapple" to "パイナップル")
println(fruit["banana"])
println(fruit["apple"])
println(fruit["pineapple"])

出力

サンプルコードを実行すると、以下のように出力されます。

バナナ
リンゴ
パイナップル

キーを指定してprintln関数で出力すると、それぞれ日本語の果物が表示されましたね。

キーと値は別々の型でも記述できる

またマップでは、キーと値の型を別々にしてもペアを作ることができます。

サンプルコード

以下のサンプルコードでは、Char型のアルファベットとInt型の整数をペアにしてマップに格納しています。

val num: Map = mapOf('a' to 1, 'b' to 2, 'c' to 3)
println(num['a'])
println(num['b'])
println(num['c'])

出力

サンプルコードを実行すると、以下のように出力されます。

1
2
3

全ての中身を参照したい時はマップ名だけを指定する

またマップでは、マップ名だけを指定することでマップの中身全てを参照することもできます。

サンプルコード

以下のサンプルコードでは、先程の果物のマップ「fruit」の中を参照しています。

val fruit = mapOf("banana" to "バナナ", "apple" to "リンゴ", "pineapple" to "パイナップル")
println(fruit)

出力

サンプルコードを実行すると、以下のように出力されます。

{banana=バナナ, apple=リンゴ, pineapple=パイナップル}
リンコ
リンコ

マップではキーと値が別々の型でもペアを作ることができるピヨ!

【Kotlin】MutableMap(ミュータブルマップ)とは?

MutableMap(ミュータブルマップ)とは?

続いて「MutableMap」とは、どういった時に使う処理なのでしょうか?MutableMapについて勉強していきましょう。

キーワードと値のペアでデータを格納する

キーワードと値のペアでデータを格納するのは、マップもミュータブルマップも同じです。

値の増減ができる

ミュータブルマップは、値を追加したり削除したりすることができます。

リストもセットもそうでしたが、ミュータブルをつけることで値の追加や削除ができるようになります。

【Kotlin】MutableMap(ミュータブルマップ)の使い方

MutableMap(ミュータブルマップ)の使い方

では実際にMutableMapの使い方を勉強していきましょう。MutableMapの使い方では、値の増減方法を1つ1つ解説していきます。

MutableMapの書式

MutableMapを使う場合の書式は以下のようになります。

値を代入する場合

まず値を代入する場合は、Mapと同じような形の書式になります。

// 通常のリストの書式
val マップ名: MutableMap<型名, 型名> = mutableMapOf(キーワード1 to 値1, キーワード2 to 値2, キーワード3 to 値3...)
// 省略したリストの書式
val マップ名 = mutableMapOf(キーワード1 to 値1, キーワード2 to 値2, キーワード3 to 値3...)

値を増やす場合

次に値を増やす場合の書式は以下のようになります。ここで注意したいのが、リストやセットなどは値を増やす時「add」を使っていましたが、ミュータブルマップの場合は「put」を使います。

ミュータブルマップ名.put(キーワード, 値)

値を削除する場合

値を削除する場合の書式は以下のようになります。削除する場合はセットと同じで「remove」を使います。

ミュータブルマップ名.remove(キーワード)
リンコ
リンコ

ミュータブルマップで値を追加する場合は「add」ではなく「put」を使うピヨ!

MutableMapを使ったコードを記述してみよう

では実際にMutableMapを使ったコードを記述してみましょう。

サンプルコード

以下のサンプルコードでは、最初に「バナナ」「リンゴ」「パイナップル」の3つの果物を「fruit」に格納しています。その後「オレンジ」を追加し「バナナを削除しています。」

val fruit = mutableMapOf("banana" to "バナナ", "apple" to "リンゴ", "pineapple" to "パイナップル")
println(fruit)
// オレンジを追加
fruit.put("orange" , "オレンジ")
// バナナを削除
fruit.remove("banana")
// 再度「fruit」の中身を出力
println("--------2回目の出力-----------")
println(fruit)

出力

サンプルコードを実行すると、以下のように出力されます。

{banana=バナナ, apple=リンゴ, pineapple=パイナップル}
--------2回目の出力-----------
{apple=リンゴ, pineapple=パイナップル, orange=オレンジ}

最初に「バナナ」「リンゴ」「パイナップル」の3つが出力されました。その後「バナナ」が削除され「オレンジが追加されていることがわかります。」

【Kotlin】getOrDefault関数について

getOrDefault関数について

最後に「getOrDefault関数」について勉強していきます。ミュータブルマップでは削除したキーを参照してしまう場合があります。

削除してなくなったキーを指定すると「null」と表示されるようになっているのですが、この「null」を表示させず、別の値を返すようにすることができます。

こういった場合に「getOrDefault関数」を使います。

※「null」はデータが存在しないという意味

getOrDefault関数の書式

getOrDefault関数を使う場合の書式は以下になります。

ミュータブルマップ名.getOrDefault("キー", "任意の文字列")

このようにミュータブルマップ名の後ろに「.getOrDefault」と記述し「()」内の値の部分には「値が存在しません」などの任意の文字列を記述します。

getOrDefault関数を使ったコードを記述してみよう

では実際にgetOrDefault関数を使ったコードを記述してみましょう。

サンプルコード

以下のサンプルコードでは、ミュータブルマップ「fruit」に3つの果物の値を入れた後、それぞれの変数「value」に代入しています。

その後バナナを削除し、削除したバナナを変数「value4」に代入し、再度出力しています。

val fruit = mutableMapOf("banana" to "バナナ", "apple" to "リンゴ", "pineapple" to "パイナップル")
val value1 = fruit.getOrDefault("banana", "値が存在しません")
val value2 = fruit.getOrDefault("apple", "値が存在しません")
val value3 = fruit.getOrDefault("pineapple", "値が存在しません")
println("${value1}${value2}${value3}")
fruit.remove("banana")
println("--------削除後の出力-----------")
val value4 = fruit.getOrDefault("banana", "値が存在しません")
println("${value1}${value2}${value3}${value4}")

出力

サンプルコードを実行すると、以下のように出力されます。

バナナリンゴパイナップル
--------削除後の出力-----------
バナナリンゴパイナップル値が存在しません

上記では最初にミュータブルマップを生成した時点で「banana」というキーと「バナナ」という値が存在しています。

そのため「value1」の値は「バナナ」になります。その後、途中でbananaとバナナが削除されているので、存在しなくなります。

よって「value4」は「バナナ」ではなく「値が存在しません」となります。

リンコ
リンコ

nullを表示させず別の値を表示させるには「getOrDefault」を使うピヨ!

まとめ

まとめ

この記事では、プログラミング言語であるKotlinのMapとMutableMapについて勉強していきましたが、いかがでしたでしょうか?今回の記事をまとめると以下のようになります。

  • マップはキーワードとキーワードに紐づけられた値をペアで保管する
  • 値を取り出す際は「[]」でキーワードを囲って指定
  • ミュータブルマップで値を追加する場合は「add」ではなく「put」を使う
  • 削除した値でnullを表示させず別の値を表示させるには「getOrDefault」を使う

今回勉強した「Map」や「MutableMap」はKotlinの入門レベルの知識になるので、何回も読み直してしっかり覚えておきましょう。

リンコ
リンコ

次回の記事では「main関数や関数の定義」について勉強していくピヨ!

プログラミング未経験の方や入門レベルの方、Kotlinについて詳しくなりたい方は、また一緒に勉強するピヨ!

コメント

タイトルとURLをコピーしました