Menu
Coddy logo textTech

キーと値のペアの挿入

CoddyのRustジャーニー「論理とフロー」セクションの一部。レッスン 29/66。

空のハッシュマップができたので、そこにデータを追加しましょう。.insert()メソッドを使用して、ハッシュマップにキーと値のペアを挿入できます。

let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");

.insert()メソッドは、キーと値という2つのパラメーターを受け取ります。この例では、国名をキーとして、それぞれの首都の cities を値として保存しています。

覚えておくべき重要な動作があります。ハッシュマップにすでに存在するキーを挿入すると、新しい値が古い値を上書きします。

capitals.insert("France", "Lyon");  // これは "Paris" を上書きします

この操作の後では、"France" を検索すると "Paris" ではなく "Lyon" が返されます。この上書き動作により、.insert() はハッシュマップに新しいエントリを追加する場合と既存のエントリを更新する場合の両方に役立ちます。

challenge icon

チャレンジ

簡単

3つの入力を受け取ります。商品名、価格(小数値)、そして別の商品名です。商品名をキー(型 String)として、価格を値(型 f64)として格納する mutable なハッシュマップを作成します。最初の商品を価格とともにハッシュマップに挿入します。次に、2番目の商品を価格 0.0 で挿入します。最後に、新しい価格で再度挿入することで、2番目の商品の価格を 15.99 に更新します。以下に示す正確な形式ですべての情報を出力してください。

.clone() に関する注意: String 変数をキーとして HashMap に挿入すると、Rust の所有権ルールにより、その変数はマップに移動され、その後は使用できなくなります。変数を引き続き使用する(たとえば、出力したり、再度挿入したりする)には、insert() に渡す際にその変数に対して .clone() を呼び出します。例: map.insert(name.clone(), price)

要件:

  • std::collections から HashMap をインポートする
  • HashMap<String, f64> の mutable なハッシュマップを作成する
  • 最初の入力を最初の商品名として読み取る
  • 2番目の入力を読み取り、最初の商品の価格として f64 に変換する
  • 商品名に .clone() を使用して、最初の商品とその価格をハッシュマップに挿入する
  • 3番目の入力を2番目の商品名として読み取る
  • 商品名に .clone() を使用して、2番目の商品を価格 0.0 で挿入する
  • .clone() を使用して、2番目の商品を価格 15.99 でもう一度挿入する(これにより以前の値が上書きされます)
  • 以下に示す正確な形式で、両方の商品の情報を出力する

入力:

  • 1行目: 最初の商品名(例: Laptop
  • 2行目: 最初の商品の価格を小数値で指定(例: 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

自分で試してみよう

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を作成し、製品を挿入して、必要な出力を表示する
    
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理とフローのすべてのレッスン

自分で練習してみよう: Rustオンラインコンパイラ