キーと値のペアの挿入
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 29/66。
空のハッシュマップが作成できたので、次はデータを追加してみましょう。.insert() メソッドを使用して、ハッシュマップにキーと値のペアを挿入できます:
let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");.insert()メソッドは、キーと値の2つのパラメータを受け取ります。この例では、国名をキーとして、その首都を値として保存しています。
覚えておくべき重要な動作があります。ハッシュマップに既に存在するキーを挿入すると、新しい値が古い値を上書きします。
capitals.insert("France", "Lyon"); // これは "Paris" を上書きしますこの操作の後、"France" を検索すると "Paris" の代わりに "Lyon" が返されます。この上書き動作により、.insert() はハッシュマップへの新しいエントリの追加と既存のエントリの更新の両方に役立ちます。
チャレンジ
簡単3つの入力を受け取ります:1つ目の製品名、その価格(小数)、および2つ目の製品名です。製品名をキー(型は String)、価格を値(型は f64)として保存するための可変(mutable)なハッシュマップを作成してください。1つ目の製品とその価格をハッシュマップに挿入します。次に、2つ目の製品を価格 0.0 で挿入します。最後に、2つ目の製品を新しい価格で再度挿入することで、その価格を 15.99 に更新してください。すべての情報を、以下に示す正確な形式で出力してください。
.clone() に関する注意: String 型の変数をキーとして HashMap に挿入する場合、Rust の所有権ルールにより、変数はマップ内にムーブ(移動)され、その後は使用できなくなります。変数を引き続き使用する場合(例:出力するため、または再度挿入するため)は、insert() に渡す際に .clone() を呼び出してください。例:map.insert(name.clone(), price)
要件:
std::collectionsからHashMapをインポートすることHashMap<String, f64>型の可変なハッシュマップを作成すること- 1番目の入力を1つ目の製品名として読み込むこと
- 2番目の入力を読み込み、1つ目の製品の価格として
f64に変換すること - 製品名に
.clone()を使用して、1つ目の製品とその価格をハッシュマップに挿入すること - 3番目の入力を2つ目の製品名として読み込むこと
- 製品名に
.clone()を使用して、2つ目の製品を価格0.0で挿入すること .clone()を使用して、2つ目の製品を価格15.99で再度挿入すること(これにより前の値が上書きされます)- 両方の製品の情報を、以下に示す正確な形式で出力すること
入力:
- 1行目:1つ目の製品名(例:
Laptop) - 2行目:1つ目の製品の価格(小数)(例:
999.99) - 3行目:2つ目の製品名(例:
Mouse)
出力:
- 1行目:
Inserted [first_product] at $[price] - 2行目:
Inserted [second_product] at $0.00 - 3行目:
Updated [second_product] to $15.99
チートシート
ハッシュマップにキーと値のペアを挿入するには、.insert()メソッドを使用します:
let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");.insert()メソッドは、キーと値の2つのパラメータを取ります。
すでに存在するキーを挿入した場合、新しい値が古い値を上書きします:
capitals.insert("France", "Lyon"); // これは"Paris"を上書きしますこの上書きの動作により、.insert()は新しいエントリの追加と既存のエントリの更新の両方に役立ちます。
自分で試してみよう
use std::collections::HashMap;
use std::io;
fn main() {
// 入力を読み込む
let mut product1 = String::new();
io::stdin().read_line(&mut product1).expect("Failed to read line");
let product1 = product1.trim().to_string();
let mut price1_input = String::new();
io::stdin().read_line(&mut price1_input).expect("Failed to read line");
let price1: f64 = price1_input.trim().parse().expect("Failed to parse price");
let mut product2 = String::new();
io::stdin().read_line(&mut product2).expect("Failed to read line");
let product2 = product2.trim().to_string();
// TODO: 以下にコードを記述してください
// ミュータブルなHashMapを作成し、製品を挿入して、必要な出力を表示します
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。