前回紹介した List と同じく、kotlin でも使われる頻度が高いのが Map です。
PHP 経験者だと連想配列と言えばしっくりくるかもしれません。
キーと値のセットで 1 つの要素を管理できるので、直感的にわかりやすい構造になっています。
今回はこの Map の活用法について紹介していきます。
Mapの定義の仕方
Map はキーと値のセットで管理すると説明しますが、変数の宣言の仕方は以下の通りです。
1 2 3 4 5 | val places : Map<String, String> = mapOf("kyoto" to "京都", "hanshin" to "阪神", "tokyo" to "東京") println("${places["kyoto"]}です") println("${places["hanshin"]}です") println("${places["tokyo"]}です") |
実行すると以下の結果が出力されます。
京都です
阪神です
東京です
ポイントは、Map の後の <> 内のジェネリクスです。
今回はキーも値も String にしましたが、ここの型を変えれば他の組み合わせの情報を管理できます。
1 2 3 4 5 | val places : Map<String, Boolean> = mapOf("kyoto" to true, "hanshin" to true, "tokyo" to false) println("京都競馬場は右回りですか?:${places["kyoto"]}") println("阪神競馬場は右回りですか?:${places["hanshin"]}") println("東京競馬場は右回りですか?:${places["tokyo"]}") |
例えば、値を Boolean にすると以下のような表現ができます。
京都競馬場は右回りですか?:true
阪神競馬場は右回りですか?:true
東京競馬場は右回りですか?:false
値の変更を許可する場合はMutableMap
List の時もそうでしたが、Map も最初に格納した情報から変更ができません。
キーや値の情報を変更したり、新たなキーバリューを追加する場合は MutableMap を使います。
1 2 3 4 5 6 7 | val places : MutableMap<String, String> = mutableMapOf("kyoto" to "京都", "hanshin" to "阪神", "tokyo" to "東京") places.put("nakayama", "中山") println("${places["kyoto"]}です") println("${places["hanshin"]}です") println("${places["tokyo"]}です") println("${places["nakayama"]}です") |
無事に「中山」が追加できましたね。
京都です
阪神です
東京です
中山です
情報を削除したい場合は、remove() でキーを指定します。
MutableList の時と同じ要領ですね。
1 2 3 4 | val places : MutableMap<String, String> = mutableMapOf("kyoto" to "京都", "hanshin" to "阪神", "tokyo" to "東京") places.remove("kyoto") println("${places["kyoto"]}です") |
ちなみに、存在しないキーを使うとエラーにはならずに null が返ります。
ここが List の時とは違った挙動となる部分です。
nullです
まとめ
Map の使い方について紹介しました。
情報に順序を持たせたい場合は List を使い、欲しい情報が特定できる場合は Map を利用します。
特に大量のデータを検索をする際にパフォーマンスが変わってくるので、何でもかんでも List を使わないように Map と上手く使い分けをしていきましょう。
別途、値だけを保持する Set というものもありますが、私はあまり使う機会がないので紹介は省きます。