API Entry dan Nilai Bawaan
Perbarui nilai dengan cara yang praktis.
API Entry dan Nilai Bawaan adalah pelajaran Learn Rust Coding gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Learn Rust Coding, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn Rust Coding mencakup 4 pelajaran total.
Mengapa Menggunakan API Entry?
Sering kali Anda ingin memperbarui nilai jika suatu kunci ada, atau memasukkan nilai bawaan jika kunci tersebut tidak ada.
Melakukannya dengan get lalu insert terasa rumit. API entry melakukannya dengan rapi dalam satu langkah.
entry Mengembalikan Slot
Memanggil entry(key) memberi Anda pegangan ke tempat kunci tersebut dalam map.
Dari pegangan itu, Anda dapat menentukan tindakan: mengisinya dengan nilai bawaan atau mengubah apa pun yang sudah ada.
use std::collections::HashMap;
fn main() {
let mut m: HashMap<&str, i32> = HashMap::new();
m.entry("a").or_insert(0);
println!("{}", m["a"]);
}or_insert
or_insert(default) memasukkan nilai bawaan hanya jika kunci tidak ada, lalu mengembalikan referensi yang dapat diubah ke nilai tersebut.
Jika kunci sudah ada, nilai bawaan diabaikan dan Anda mendapatkan nilai yang sudah ada.
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
m.insert("a", 10);
m.entry("a").or_insert(99);
m.entry("b").or_insert(99);
println!("a={}, b={}", m["a"], m["b"]);
}Mengubah melalui Referensi
Karena or_insert mengembalikan referensi yang dapat diubah, Anda dapat langsung mengubah nilainya.
Gunakan dereferensi dengan * untuk memperbarui nilai langsung di tempatnya. Inilah inti dari penghitungan.
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
let count = m.entry("hits").or_insert(0);
*count += 1;
*count += 1;
println!("hits = {}", m["hits"]);
}Menghitung dalam Perulangan
Pola klasiknya adalah: untuk setiap item, ambil slot-nya, tetapkan nilai bawaan nol, lalu naikkan nilainya.
Dengan demikian, kemunculan dapat dihitung hanya dengan satu baris logika untuk setiap item.
use std::collections::HashMap;
fn main() {
let mut counts = HashMap::new();
for c in "hello".chars() {
*counts.entry(c).or_insert(0) += 1;
}
println!("l appears {} times", counts[&'l']);
}or_insert_with
Saat nilai bawaan membutuhkan biaya besar untuk dibuat, gunakan or_insert_with. Metode ini menerima closure yang hanya dijalankan jika kunci tidak ada.
Dengan begitu, Anda tidak perlu membuat nilai yang mungkin tidak akan pernah diperlukan.
use std::collections::HashMap;
fn main() {
let mut m: HashMap<&str, Vec<i32>> = HashMap::new();
m.entry("nums").or_insert_with(Vec::new).push(1);
m.entry("nums").or_insert_with(Vec::new).push(2);
println!("{:?}", m["nums"]);
}and_modify
and_modify menjalankan closure pada nilai hanya jika kunci sudah ada.
Rangkaikan dengan or_insert untuk menangani kedua kasus: mengubah jika ada, atau memasukkan nilai awal jika tidak ada.
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
m.insert("x", 5);
m.entry("x").and_modify(|v| *v += 10).or_insert(0);
m.entry("y").and_modify(|v| *v += 10).or_insert(1);
println!("x={}, y={}", m["x"], m["y"]);
}or_default
Jika tipe nilai memiliki Default (seperti 0 untuk bilangan bulat atau Vec kosong), or_default akan menggunakannya.
Ini adalah bentuk singkat dari or_insert(Default::default()).
use std::collections::HashMap;
fn main() {
let mut m: HashMap<&str, i32> = HashMap::new();
*m.entry("score").or_default() += 7;
println!("score = {}", m["score"]);
}Membangun Daftar per Kunci
API entry sangat berguna saat mengelompokkan item ke dalam vektor.
Untuk setiap kunci, gunakan Vec kosong sebagai nilai bawaan pada kemunculan pertama, lalu lakukan push ke vektor yang ada.
use std::collections::HashMap;
fn main() {
let mut groups: HashMap<bool, Vec<i32>> = HashMap::new();
for n in [1, 2, 3, 4] {
groups.entry(n % 2 == 0).or_default().push(n);
}
println!("evens: {:?}", groups[&true]);
}Mengapa Bukan get + insert?
Melakukan get lalu insert secara terpisah mencari kunci dua kali dan berbenturan dengan pemeriksa peminjaman.
API entry hanya melakukan satu pencarian dan memberikan tepat satu referensi yang aman, sehingga lebih cepat dan rapi.
Menggabungkan Semuanya
Di sini, penghitungan dan nilai bawaan digabungkan untuk menemukan jumlah words berbeda yang dimulai dengan setiap huruf.
Perhatikan pola penghitungan satu baris yang sedang diterapkan.
use std::collections::HashMap;
fn main() {
let words = ["ant", "art", "bee"];
let mut by_first: HashMap<char, i32> = HashMap::new();
for w in words {
*by_first.entry(w.chars().next().unwrap()).or_insert(0) += 1;
}
println!("a: {}", by_first[&'a']);
}Pemeriksaan Singkat
Anda ingin menghitung chars dengan satu pencarian untuk setiap char.
Rangkuman
API entry memungkinkan Anda melakukan insert atau update dalam satu pencarian.
Anda menggunakan or_insert, or_insert_with, or_default, dan and_modify untuk menghitung item serta membuat daftar per kunci dengan rapi.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “API Entry dan Nilai Bawaan” gratis?
Ya — teks lengkap “API Entry dan Nilai Bawaan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn Rust Coding, upgrade ke CoddyKit PRO. Kursus Learn Rust Coding mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “API Entry dan Nilai Bawaan”?
Perbarui nilai dengan cara yang praktis. Kamu berlatih Learn Rust Coding dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Learn Rust Coding?
Tidak diperlukan pengalaman sebelumnya. Learn Rust Coding di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “API Entry dan Nilai Bawaan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Learn Rust Coding ini?
Ya. Setiap pelajaran Learn Rust Coding menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Membangun HashMap
- API Entry dan Nilai Bawaan
- Bekerja dengan HashSet
- Menghitung dan Mengelompokkan