【Kotlin/Android Studio】Map/MutableMapの使い方!追加/取得などの操作方法

この記事からわかること

  • Android Studio/KotlinMap/MutableMap使い方
  • キーデータ保持する
  • 取得追加削除などの操作方法
  • サイズ空かどうかフィルタリングソートforループ

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

Mapとは?

KotlinのMapとはListなどと同じようにデータを複数保持できるコレクション型の1つとして定義されたデータ型です。Mapキー(Key)と値(Value)の2つのペアでデータを保持する特徴があります。

Swiftなど他の言語では辞書(Dictionary)型などと呼ばれていることが多いです。

KotlinのMapはSwiftの辞書型とは異なり、順序を保持することができます。またキーと値はNullableになっているのでnullを含めることが可能になっています。また不変(Immutable)なコレクションであるMap可変な(Mutable)コレクションであるMutableMapに分かれています。

定義方法

Map不変(Immutable)なコレクションであるとして定義されており、要素の変更や追加ができません。インスタンスを生成するにはmapOfメソッドを使用し、key to valueの形式で記述していきます。

var user = mapOf("name" to "ame","place" to "東京都")
print(user) // {name=ame, place=東京都}

またキーには異なるデータ型を指定することも可能です。

var user = mapOf("name" to "ame", 100 to "東京都")
print(user) // {name=ame, 100=東京都}

値を取得する

Map内のデータを取得するには[キー]形式でキーを指定します。存在しないキーを指定した場合はnullが返ります。

var user = mapOf("name" to "ame", 100 to "東京都")
print(user["name"]) // ame
print(user[100])    // 東京都
print(user[1])      // null

MutableMapとは?

一方MutableMap可変な(Mutable)コレクションとして定義されており、要素の変更や追加が可能になっています。そのため要素を追加するためのputメソッドや削除するためのremoveメソッドが用意されています。

定義方法

インスタンスを生成するにはmutableMapOfメソッドを使用し、key to valueの形式で記述していきます。

var user = mutableMapOf("name" to "ame", "place" to "東京都")

追加する

要素を追加したい場合はキーを指定して格納するだけです。

var user = mutableMapOf("name" to "ame", "place" to "東京都")
user["age"] = "20"
print(user) // {name=ame, place=東京都, age=20}

他にもputメソッドやputAllメソッドを使用して追加することが可能です。

var user = mutableMapOf("name" to "ame", "place" to "東京都")
user.put("age", "20")
print(user) // {name=ame, place=東京都, age=20}
var user = mutableMapOf("name" to "ame", "place" to "東京都")
user.putAll(mapOf("age" to "20", "hobby" to "tennis"))
print(user) // {name=ame, place=東京都, age=20, hobby=tennis}

削除する

要素を削除したい場合はremoveメソッドの引数にキーを指定します。

var user = mutableMapOf("name" to "ame", "place" to "東京都")
user.remove("place")
print(user) // {name=ame}

-=演算子を使用しても削除することが可能です。

var user = mutableMapOf("name" to "ame", "place" to "東京都")
user -= "place"
print(user) // {name=ame}

条件でフィルタリングする

ここからはMap/MutableMapの両方に利用できるメソッドを紹介していきます。

条件を指定して要素をフィルタリングしたい場合filterメソッドを使用します。引数には絞り込みたい条件を渡します。以下の動作を見ると分かりますが、filterメソッドは元のインスタンスを変更しません。

var date = mutableMapOf("2024/1/17" to 100, "2024/1/18" to 60, "2024/1/19" to 80, "2024/1/20" to 90)
date.filter { it.value > 80 }
print(date) // {2024/1/17=100, 2024/1/18=60, 2024/1/19=80, 2024/1/20=90}

そのため変数に格納することでフィルタリングされたリストのコピーを取得することができます。取得したリストはイミュータブルなMapなのでミュータブルにしたい場合はtoMutableMapメソッドを使用して変換することができます。

var date = mapOf("2024/1/17" to 100, "2024/1/18" to 60, "2024/1/19" to 80, "2024/1/20" to 90)
var filteringDate = date.filter { it.value > 80 }.toMutableMap()
print(filteringDate) // {2024/1/17=100, 2024/1/20=90}

要素数を取得する:size

コレクションの要素数はsizeプロパティから取得できます。

var date = mapOf("2024/1/17" to 100, "2024/1/18" to 60, "2024/1/19" to 80, "2024/1/20" to 90)
print(date.size) // 4

中身が空か確認する:isEmpty

中身が空か確認するにはisEmptyメソッドを使用します。空であればtrueを返します。またisNotEmptyメソッドはその逆です。

var date = mapOf("2024/1/17" to 100, "2024/1/18" to 60, "2024/1/19" to 80, "2024/1/20" to 90)
print(date.isEmpty())    // false
print(date.isNotEmpty()) // true

含まれているか確認する:contains

コレクションの中に要素が含まれているか確認するにはcontains(element: T)メソッドを使用します。引数に対象の要素を渡します。

var date = mapOf("2024/1/17" to 100, "2024/1/18" to 60, "2024/1/19" to 80, "2024/1/20" to 90)
print(date.contains("2024/1/18")) // true

ソートする:toSortedMap

コレクション内をソートするにはtoSortedMapメソッドを指定します。

var date = mapOf("2024/1/19" to 80, "2024/1/17" to 100, "2024/1/20" to 90, "2024/1/18" to 60)
var sortedMap = date.toSortedMap()
print(sortedMap) // {2024/1/17=100, 2024/1/18=60, 2024/1/19=80, 2024/1/20=90}

条件でソートする:sortedBy

条件をつけて並び替えたい場合はentriesプロパティからエントリーを取得してsortedByメソッドを使用します。

var date = mapOf("2024/1/19" to 80, "2024/1/17" to 100, "2024/1/20" to 90, "2024/1/18" to 60)
var sortedMap = date.entries.sortedBy { it.value }
print(sortedMap) // [2024/1/18=60, 2024/1/19=80, 2024/1/20=90, 2024/1/17=100]

中身を繰り返し取り出す:for

Mapの中身を繰り返し取り出すにはいくつか方法があります。

forループ

var date = mapOf("2024/1/17" to 100, "2024/1/18" to 60, "2024/1/19" to 80, "2024/1/20" to 90)

for ((key, value) in date) {
    print("key: $key, Value: $value")
}

forEach

var date = mapOf("2024/1/17" to 100, "2024/1/18" to 60, "2024/1/19" to 80, "2024/1/20" to 90)

date.forEach { key, value -> 
    print("key: $key, Value: $value")
}

キー/値のみを取り出す

var date = mapOf("2024/1/17" to 100, "2024/1/18" to 60, "2024/1/19" to 80, "2024/1/20" to 90)

for (key in date.keys) {
    println("Key: $key, Value: ${date[key]}")
}

for (value in date.values) {
    println("Value: $value")
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index