この記事で学べる知識:Map
この記事の練習問題を解くために必要な知識:
基礎文法、制御構造、関数(レッスン1~3)、配列、List、Set、Map、コレクション操作、コレクションとジェネリクス
<<前のページ | Kotlin記事一覧 |
次のページ>> |
Kotlinの「Map」とは
この章ではKotlinにおける「Map」の意味や使い方を学習します。用語の解説が不要な方はここをクリックして練習問題へ飛びましょう。
KotlinのMapはキーと値のペアを管理するデータ構造です。
この章ではMapの基本的な使い方と操作方法を学びます。
Mapとは?
Mapはキー(key)と値(value)のペアで構成されるコレクションです。
例えば、ユーザーIDをキーにして名前を値として保持する場合などに使用されます。
Mapはキーを用いて効率的に値を検索するため、データを迅速に操作する必要がある場面で非常に有用です。
Mapの基本構文
KotlinではMapOf
とmutableMapOf
を使用してMapを作成します。
MapOf
は読み取り専用のMapを作成し、mutableMapOf
は変更可能なMapを作成します。
// 読み取り専用のMap
val readOnlyMap = mapOf(1 to "One", 2 to "Two", 3 to "Three")
// 変更可能なMap
val mutableMap = mutableMapOf(1 to "One", 2 to "Two")
mapOf
ではto
演算子を使用してキーと値をペアとして指定します。
一方mutableMapOf
では要素の追加や削除も可能です。
Mapの使用例
以下にMapの基本的な使用例を示します。
fun main() {
// Mapの作成
val fruits = mapOf("Apple" to 100, "Banana" to 50, "Cherry" to 200)
val mutableFruits = mutableMapOf("Apple" to 100, "Banana" to 50)
// 値の取得
println(fruits["Apple"]) // 出力: 100
// 要素の追加(変更可能なMap)
mutableFruits["Cherry"] = 200
println(mutableFruits) // 出力: {Apple=100, Banana=50, Cherry=200}
// 要素の削除(変更可能なMap)
mutableFruits.remove("Banana")
println(mutableFruits) // 出力: {Apple=100, Cherry=200}
}
このコードではmapOf
を用いてキーと値のペアを作成し、mutableMapOf
で要素を追加・削除しています。
Mapを操作する方法
変更可能なMapには、要素を操作するための便利なメソッドが用意されています。
要素の追加:
put
メソッドまたはインデックス演算子([]
)を使用します。
mutableMap.put("Grape", 300)
mutableMap["Peach"] = 150
要素の取得:
キーを使用して値を取得します。
val price = mutableMap["Apple"]
println(price) // 出力: 100
要素の削除:
remove
メソッドを使用します。
mutableMap.remove("Apple")
繰り返し処理:
Mapのすべての要素を反復処理することもできます。
for ((key, value) in mutableMap) {
println("$key costs $value")
}
まとめ
KotlinのMapは、キーと値のペアでデータを効率的に管理できる便利なコレクションです。
この章では読み取り専用と変更可能なMapの違いや、要素の追加・削除・取得方法について学びました。
次回はコレクション操作について学習を進めます。
Mapの練習問題
商品とその価格を管理するプログラムを作成しましょう。
このプログラムではMapを使って商品名をキー、価格を値として登録します。
登録された商品を表示し、新しい商品を追加したり、価格を更新したり、特定の商品を削除したりします。
また指定された商品がリストに存在するか確認できるようにします。
この問題の要件
以下の要件に従ってコードを完成させてください。
- 商品名をキー、価格を値とする
productPrices
というMapを作成すること。- りんご:120円
- バナナ:100円
- オレンジ:150円
- Mapの内容を表示する処理を作成すること。
- 以下の機能を実装すること。
- ユーザーに商品名を入力させ、入力された商品の価格を表示する。商品が存在しない場合はその旨を表示する。
- Mapに新しい商品「ぶどう:200円」を追加する。
- 「バナナ」の価格を110円に更新する。
- 「オレンジ」をMapから削除する。
- 更新後のMapの内容を再度表示すること。
ただし、以下のような実行結果となるコードを書くこと。
*****↓↓正解コードの実行結果の例↓↓*****
現在の商品リスト:
りんご : ¥120
バナナ : ¥100
オレンジ : ¥150
商品名を入力してください(例: りんご):
りんご
りんご の価格は ¥120 です
新しい商品を追加します...
ぶどう がリストに追加されました
商品の価格を更新します...
バナナの価格が更新されました!
商品を削除します...
オレンジ がリストから削除されました
更新後の商品リスト:
りんご : ¥120
バナナ : ¥110
ぶどう : ¥200
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)
1:メイン関数の定義
□ 変数productPricesをmutableMapOfで初期化
□ □ キーに「りんご」、値に120を設定
□ □ キーに「バナナ」、値に100を設定
□ □ キーに「オレンジ」、値に150を設定
□ 「現在の商品リスト:」を出力
□ for文でproductPricesのキーと値を繰り返し処理
□ □ 「商品名 : 価格」の形式で出力
□ 「商品名を入力してください(例: りんご)」を出力
□ readLineで入力を受け取り、変数inputに格納
□ if文でinputがproductPricesに含まれているか判定
□ □ 真の場合、「商品名 の価格は ¥価格」を出力
□ □ elseブロック
□ □ □ 偽の場合、「商品名 はリストにありません」と出力
□ 「新しい商品を追加します…」を出力
□ Mapに新しい商品「ぶどう」と価格200を追加
□ 「ぶどう がリストに追加されました」を出力
□ 「商品の価格を更新します…」を出力
□ if文で「バナナ」がproductPricesに含まれているか判定
□ □ 真の場合、価格を110に更新
□ □ 「バナナの価格が更新されました!」を出力
□ 「商品を削除します…」を出力
□ Mapから「オレンジ」を削除
□ 「オレンジ がリストから削除されました」を出力
□ 「更新後の商品リスト:」を出力
□ for文で更新後のproductPricesを繰り返し処理
□ □ 「商品名 : 価格」の形式で出力
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
// メイン関数
fun main() {
// 商品名をキー、価格を値として保持するMap
/*【穴埋め問題1】
ここでmutableMapOfを使用して、キーとして商品名、値として価格を保持するMapを初期化するコードを書いてください。
*/
// Mapの内容を表示
println("現在の商品リスト:")
for ((product, price) in productPrices) {
println("$product : ¥$price")
}
// 商品の価格を検索
println("\n商品名を入力してください(例: りんご):")
/*【穴埋め問題2】
ここでreadLine()を使用してユーザー入力を受け取り、変数inputに格納するコードを書いてください。
*/
if (productPrices.containsKey(input)) {
println("$input の価格は ¥${productPrices[input]} です")
} else {
println("$input はリストにありません")
}
// 商品の追加
println("\n新しい商品を追加します...")
/*【穴埋め問題3】
ここで新しい商品をMapに追加するコードを書いてください。
*/
println("ぶどう がリストに追加されました")
// 商品価格の更新
println("\n商品の価格を更新します...")
/*【穴埋め問題4】
ここでMap内の商品の価格を更新するコードを書いてください。
*/
println("バナナの価格が更新されました!")
// 商品の削除
println("\n商品を削除します...")
/*【穴埋め問題5】
ここでMapから指定された商品を削除するコードを書いてください。
*/
println("オレンジ がリストから削除されました")
// 更新後のMapの内容を表示
println("\n更新後の商品リスト:")
for ((product, price) in productPrices) {
println("$product : ¥$price")
}
}
以上がこの問題の穴埋めコードです。
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
練習問題の解答と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
// メイン関数
fun main() {
// 商品名をキー、価格を値として保持するMap
val productPrices = mutableMapOf(
"りんご" to 120,
"バナナ" to 100,
"オレンジ" to 150
)
// Mapの内容を表示
println("現在の商品リスト:")
for ((product, price) in productPrices) {
println("$product : ¥$price")
}
// 商品の価格を検索
println("\n商品名を入力してください(例: りんご):")
val input = readLine() ?: ""
if (productPrices.containsKey(input)) {
println("$input の価格は ¥${productPrices[input]} です")
} else {
println("$input はリストにありません")
}
// 商品の追加
println("\n新しい商品を追加します...")
productPrices["ぶどう"] = 200
println("ぶどう がリストに追加されました")
// 商品価格の更新
println("\n商品の価格を更新します...")
if (productPrices.containsKey("バナナ")) {
productPrices["バナナ"] = 110
println("バナナの価格が更新されました!")
}
// 商品の削除
println("\n商品を削除します...")
productPrices.remove("オレンジ")
println("オレンジ がリストから削除されました")
// 更新後のMapの内容を表示
println("\n更新後の商品リスト:")
for ((product, price) in productPrices) {
println("$product : ¥$price")
}
}
正解コードの解説
今回のコードではKotlinの「Map」を中心に商品と価格を管理する方法を学びます。
コードをブロックごとに分割して説明します。
Mapの初期化
val productPrices = mutableMapOf(
"りんご" to 120,
"バナナ" to 100,
"オレンジ" to 150
)
mutableMapOf
: 変更可能なMapを作成するための関数です。- ここでは商品名(キー)と価格(値)のペアをMapとして初期化しています。
"りんご" to 120
のようにto
を使ってキーと値のペアを作ります。
- Mapの用途: データをキーと値の組み合わせで効率的に管理できます。
Mapの内容を表示
for ((product, price) in productPrices) {
println("$product : ¥$price")
}
for ((key, value) in map)
: Mapの各要素を繰り返し処理する方法です。
- キーと値がそれぞれ
product
とprice
に割り当てられます。 - この部分で現在のMapに含まれる商品と価格を全て表示します。
商品の検索
val input = readLine() ?: ""
if (productPrices.containsKey(input)) {
println("$input の価格は ¥${productPrices[input]} です")
} else {
println("$input はリストにありません")
}
readLine()
: ユーザーの入力を取得します。containsKey
: 指定したキーがMapに含まれているかを確認します。map[key]
: キーに対応する値を取得します。存在しない場合はnull
を返します。- この部分では、ユーザーが入力した商品名の価格を検索して表示します。
商品の追加
productPrices["ぶどう"] = 200
println("ぶどう がリストに追加されました")
map[key] = value
: Mapに新しいキーと値を追加します。
キーが既に存在する場合は値を更新します。
商品の価格を更新
productPrices["バナナ"] = 110
println("バナナの価格が更新されました!")
キーが既存の場合: 上記のようにmap[key] = value
を使用することで値を更新できます。
商品の削除
productPrices.remove("オレンジ")
println("オレンジ がリストから削除されました")
remove(key)
: 指定したキーと対応する値をMapから削除します。
更新後のMapの内容を表示
for ((product, price) in productPrices) {
println("$product : ¥$price")
}
前述の内容表示部分と同様のコードを再利用して、更新後のMapを表示します。
まとめ
このコードではKotlinのMap
の基本的な使い方(初期化、要素の追加、更新、削除、検索)を学びました。
Mapはデータをキーと値のペアで管理する際に非常に便利なデータ構造です。
この練習を通じてMapを操作する力を身につけ、さらに複雑なデータ管理にも挑戦してみてください!
<<前のページ |
Kotlin記事一覧 |
次のページ>> |
この記事への質問・コメント
この記事を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。
Kotlinのテキスト&問題集トップへ戻る
トップページへ戻る