Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
マップ — mapOf() / mutableMapOf()
Kotlinの『mapOf()』でキーと値のペアを持つ不変マップを、『mutableMapOf()』で可変マップを作成します。『to』中置関数でペアを作り、『[]』演算子や『get()』で値を取得します。
構文
// 不変マップの作成
val capitals = mapOf("日本" to "東京", "フランス" to "パリ")
// 可変マップの作成
val scores = mutableMapOf("Alice" to 85, "Bob" to 72)
scores["Carol"] = 91 // 追加・更新
scores.remove("Bob") // 削除
// 値の取得
val tokyo = capitals["日本"] // "東京"(なければ null)
val default = capitals.getOrDefault("ドイツ", "不明") // "不明"
val safe = capitals.getOrElse("ドイツ") { "不明" } // "不明"
メソッド一覧
| メソッド/プロパティ | 概要 |
|---|---|
| mapOf(k to v, ...) | 不変マップを作成します。 |
| mutableMapOf(k to v, ...) | 可変マップを作成します。 |
| マップ[key] | 値を取得します(なければ null)。 |
| マップ.get(key) | [] と同等です。 |
| マップ.getOrDefault(key, デフォルト) | キーがなければデフォルト値を返します。 |
| マップ.getOrElse(key) { ラムダ } | キーがなければラムダの結果を返します。 |
| マップ.containsKey(key) | キーが存在するか確認します(key in マップ でも可)。 |
| マップ.keys / .values / .entries | キー・値・エントリのコレクションを返します。 |
| MutableMap[key] = value | 値を追加・更新します。 |
| MutableMap.remove(key) | キーと値を削除します。 |
| MutableMap.putIfAbsent(key, value) | キーが存在しない場合のみ追加します。 |
| マップ.map { (k, v) -> } | エントリを変換した新しいリストを返します。 |
| マップ.filter { (k, v) -> } | 条件を満たすエントリのみのマップを返します。 |
サンプルコード
fun main() {
// 基本の mapOf
val capitals = mapOf(
"日本" to "東京",
"フランス" to "パリ",
"イギリス" to "ロンドン",
"ドイツ" to "ベルリン"
)
// キーアクセス
println(capitals["日本"]) // 東京
println(capitals["スペイン"]) // null
println(capitals.getOrDefault("スペイン", "不明")) // 不明
// 存在確認
println("日本" in capitals) // true
println(capitals.containsKey("中国")) // false
println()
// keys / values / entries
println("国: ${capitals.keys}")
println("首都: ${capitals.values}")
capitals.entries.forEach { (country, capital) ->
println(" $country → $capital")
}
println()
// 可変マップ
val inventory = mutableMapOf("りんご" to 10, "バナナ" to 5)
inventory["オレンジ"] = 8 // 追加
inventory["りんご"] = 15 // 更新
inventory.remove("バナナ") // 削除
println("在庫: $inventory")
// putIfAbsent — 存在しない場合のみ追加します。
inventory.putIfAbsent("りんご", 999) // すでにあるのでスキップ
inventory.putIfAbsent("ぶどう", 3) // 追加されます。
println("追加後: $inventory")
println()
// map / filter でマップを変換します。
val prices = mapOf("りんご" to 150, "バナナ" to 100, "オレンジ" to 200, "ぶどう" to 500)
// 100円超の商品のみ絞り込みます。
val expensive = prices.filter { (_, price) -> price > 150 }
println("150円超: $expensive")
// 価格を1.1倍にした新しいマップを作ります。
val raised = prices.mapValues { (_, price) -> (price * 1.1).toInt() }
println("10%値上げ後: $raised")
}
概要
Kotlinのマップ操作はリストと同様に関数型スタイルが使えます。『mapValues()』でマップの値だけ変換したり、『filter()』でキー・値の条件で絞り込んだりできます。
マップにはJavaの『LinkedHashMap』が使われるため、挿入順が保証されます(『sortedMapOf()』を使えばキーのアルファベット順になります)。
セットの操作はセット — setOf() / mutableSetOf()を、リストの基本はリスト — 生成 / listOf() / mutableListOf()を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。