#16 Scalaで学ぶ辞書型(マップ)の基本

Scalaで名前と値の組み合わせを扱うには、Mapという、変更しないことを基本とする仕組みを使います。この記事では、Scalaにおける辞書に相当する使い方と、安全な値の取り出し方を解説します。

Mapを作ってみる

val scores = Map("太郎" -> 90, "次郎" -> 85)

->という記号を使って、キーと値を組み合わせます。

値を取り出す

ScalaのMapから値を取り出した結果は、RustのOptionに似たOption型として返されます。

scores.get("太郎") match {
    case Some(score) => println(score)
    case None => println("見つかりません")
}

存在しない場合の既定値をあらかじめ決めておきたいときはgetOrElseが便利です。

val score = scores.getOrElse("三郎", 0)
println(score) // 0

キーが存在するか確認する

if (scores.contains("太郎")) {
    println("太郎さんのデータがあります")
}

全てのキーと値を順に処理する

scores.foreach { case (name, score) =>
    println(s"$name: $score")
}

キーだけ、値だけを取り出したい場合は、それぞれscores.keys・scores.valuesが使えます。

Mapの中身を加工する

すべての値に処理をしたい場合はview.mapValues、条件に合う要素だけ残したい場合はfilterが使えます。

val doubled = scores.view.mapValues(_ * 2).toMap
val passed = scores.filter { case (_, score) => score >= 80 }

Scalaならではの注意点

ScalaのMapも、以前の記事で触れたListと同じく、変更しないことが基本です。値を追加したい場合は、scores + ("三郎" -> 78)のように、新しいMapを作る形になります。元のscores自体は変わらない点を覚えておきましょう。どうしても中身を直接書き換えたい場合は、scala.collection.mutable.Mapという可変版も用意されていますが、意図しない副作用を防ぐため、まずは変更不可のMapから使い始めるのがおすすめです。

まとめ

Scalaの辞書はMapが基本で、Option型やgetOrElseを使って安全に値を取り出します。値の追加は新しいMapを作る形になる点も覚えておきましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

Scalaをもっと学びたい方には「実践Scala入門」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本