#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿