Mengakses Nilai
Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 30 dari 66.
Setelah kamu menyimpan data di hash map, kamu memerlukan cara untuk mengambilnya. method .get() memungkinkanmu mencari nilai menggunakan key-nya:
let value = my_map.get("some_key");Namun, ada detail penting yang perlu kamu pahami: .get() tidak langsung mengembalikan nilainya. Sebaliknya, method ini mengembalikan tipe Option, yaitu tipe bawaan Rust yang mewakili “sesuatu” atau “tidak ada”. Ini karena kunci yang kamu cari mungkin tidak ada di hash map.
Jika kunci ada, .get() mengembalikan Some(&value), perhatikan simbol &, yang berarti kamu mendapatkan referensi ke nilai, bukan nilainya sendiri. Jika kunci tidak ada, fungsi ini mengembalikan None:
match capitals.get("France") {
Some(capital) => println!("The capital is {}", capital),
None => println!("Country not found"),
}Kamu mungkin menyadari bahwa arm match menggunakan Some(capital) tanpa & yang ditulis secara eksplisit. Ini karena Rust otomatis menangani referensi untukmu dalam konteks ini: capital tetap menyimpan referensi ke nilai tersebut, tetapi kamu tidak perlu menulis & secara eksplisit dalam pola. Pencocokan pola Rust cukup cerdas sehingga kamu bisa langsung menggunakan capital, misalnya saat mencetaknya.
Desain ini mencegah programmu crash saat kamu mencoba mengakses kunci yang tidak ada. Alih-alih menyebabkan error, Rust mengharuskanmu menangani kedua kemungkinan, menemukan nilai atau tidak menemukannya, sehingga kodemu lebih tangguh dan mudah diprediksi.
Tantangan
MudahKamu akan menerima dua input: nama negara dan nama kota ibu kota. Buat hash map yang menyimpan nama negara sebagai kunci (tipe String) dan kota ibu kotanya sebagai nilai (tipe String). Masukkan negara dan ibu kotanya ke dalam hash map. Kemudian, kamu akan menerima input ketiga berupa nama negara lain yang akan dicari. Gunakan method .get() untuk mengambil ibu kota negara ini, lalu tangani kedua kasus: saat negara tersebut ada di dalam map dan saat tidak ada.
Catatan: .get() mengembalikan Option, yaitu Some(&value) (referensi ke nilai) saat kunci ada, atau None saat tidak ada. Dalam arm match, kamu dapat menulis Some(capital) dan Rust akan menangani referensi tersebut secara otomatis, sehingga kamu dapat menggunakan capital secara langsung dalam pernyataan cetak.
Persyaratan:
- Impor
HashMapdaristd::collections - Buat hash map mutable dengan tipe
HashMap<String, String> - Baca input pertama sebagai nama negara
- Baca input kedua sebagai nama kota ibu kota
- Masukkan negara dan ibu kotanya ke dalam hash map
- Baca input ketiga sebagai negara yang akan dicari
- Gunakan
.get()untuk mengambil ibu kota negara yang dicari - Gunakan
matchuntuk menanganiOptionyang dikembalikan oleh.get() - Jika negara ditemukan, cetak:
The capital of [country] is [capital] - Jika negara tidak ditemukan, cetak:
[country] not found in the map
Input:
- Baris pertama: Nama negara yang akan dimasukkan (misalnya,
France) - Baris kedua: Nama kota ibu kota (misalnya,
Paris) - Baris ketiga: Nama negara yang akan dicari (misalnya,
FranceatauGermany)
Output:
- Jika negara yang dicari ada:
The capital of [country] is [capital] - Jika negara yang dicari tidak ada:
[country] not found in the map
Coba sendiri
use std::collections::HashMap;
use std::io;
fn main() {
// Baca nama negara yang akan dimasukkan
let mut country = String::new();
io::stdin().read_line(&mut country).expect("Failed to read line");
let country = country.trim().to_string();
// Baca nama ibu kota
let mut capital = String::new();
io::stdin().read_line(&mut capital).expect("Failed to read line");
let capital = capital.trim().to_string();
// Baca nama negara yang akan dicari
let mut lookup_country = String::new();
io::stdin().read_line(&mut lookup_country).expect("Failed to read line");
let lookup_country = lookup_country.trim().to_string();
// TODO: Tulis kodemu di bawah ini
// Buat HashMap, masukkan negara dan ibu kotanya, lalu cari negara tersebut
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Alur Kontrol Lanjutan
Ekspresi 'match'Mencocokkan Beberapa NilaiMencocokkan RentangEkspresi 'if let'Perulangan sebagai EkspresiRangkuman, Parser Perintah Sederhana4Mengelompokkan Data dengan Struct
Apa Itu Struct?Ringkasan StructMengakses Field StructStruct yang Dapat DiubahStruct sebagai Parameter FungsiStruct TupleRangkuman: Buat Struct Buku2Pengantar Vektor
Apa Itu Vektor?Membuat VektorMenambahkan Elemen dengan pushMengakses Elemen VektorMelakukan Iterasi pada VektorIterasi MutableMenghapus ElemenRangkuman: Pelacak Skor Dasar5Pasangan Kunci-Nilai dengan Hash Map
Apa Itu Hash Map?Membuat Hash MapMenyisipkan Pasangan Kunci-NilaiMengakses NilaiMenelusuri Hash MapMemperbarui NilaiMenghapus PasanganRangkuman: Penghitung Kata8Proyek: Inventaris Barang Sederhana
Menyiapkan ProyekMenambahkan BarangMemeriksa StokMenjual BarangMenyatukan Semuanya3Daftar Tugas Baris Perintah
Penyiapan ProyekMenambahkan TugasMelihat Semua TugasMenghapus TugasKode AkhirLatihan sendiri: Compiler Rust online