Entry-API und Standardwerte
Aktualisieren Sie Werte auf idiomatische Weise.
Entry-API und Standardwerte ist eine kostenlose Learn Rust Coding-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Learn Rust Coding-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Learn Rust Coding-Kurs umfasst insgesamt 4 Lektionen.
Warum die Entry-API?
Oft möchten Sie einen Wert aktualisieren, wenn ein Schlüssel existiert, oder andernfalls einen Standardwert einfügen.
Mit get und anschließendem insert ist das umständlich. Die entry-API erledigt dies übersichtlich in einem Schritt.
entry gibt einen Platzhalter zurück
Der Aufruf von entry(key) gibt Ihnen ein Handle für den Platz dieses Schlüssels in der Map.
Über dieses Handle entscheiden Sie, was geschehen soll: einen Standardwert einfügen oder den vorhandenen Wert ändern.
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) fügt den Standardwert nur ein, wenn der Schlüssel fehlt, und gibt anschließend eine mutable Referenz auf den Wert zurück.
Wenn der Schlüssel bereits existiert, wird der Standardwert ignoriert und der vorhandene Wert zurückgegeben.
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"]);
}Über die Referenz ändern
Da or_insert eine mutable Referenz zurückgibt, können Sie den Wert sofort ändern.
Dereferenzieren Sie die Referenz mit *, um den Wert direkt zu aktualisieren. Das ist die Grundlage des Zählens.
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"]);
}In einer Schleife zählen
Das klassische Muster: Für jedes Element rufen Sie seinen Platz ab, setzen den Standardwert auf null und erhöhen ihn.
So zählen Sie Vorkommen mit nur einer Zeile Logik pro Element.
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
Wenn der Standardwert aufwendig zu erstellen ist, verwenden Sie or_insert_with. Die Methode nimmt eine Closure entgegen, die nur ausgeführt wird, wenn der Schlüssel fehlt.
So vermeiden Sie, einen Wert zu erstellen, den Sie möglicherweise nie benötigen.
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 führt eine Closure für den Wert nur dann aus, wenn der Schlüssel bereits existiert.
Kombinieren Sie die Methode mit or_insert, um beide Fälle zu behandeln: bei einem vorhandenen Schlüssel ändern, andernfalls einen Startwert einfügen.
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
Wenn der Werttyp über ein Default verfügt, etwa 0 für Ganzzahlen oder ein leerer Vec, verwendet or_default diesen Standardwert.
Die Methode ist eine Kurzform für 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"]);
}Listen pro Schlüssel erstellen
Die Entry-API spielt ihre Stärken aus, wenn Sie Elemente in Vektoren gruppieren.
Verwenden Sie für jeden Schlüssel beim ersten Auftreten standardmäßig einen leeren Vec und fügen Sie anschließend Elemente an den vorhandenen Vektor an.
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]);
}Warum nicht get + insert?
Ein separates get und anschließendes insert sucht den Schlüssel zweimal und gerät mit dem Borrow Checker in Konflikt.
Die Entry-API führt nur eine Suche durch und gibt Ihnen genau eine sichere Referenz. Dadurch ist sie schneller und übersichtlicher.
Alles zusammenführen
Hier werden Zählen und ein Standardwert kombiniert, um zu ermitteln, wie viele verschiedene Wörter mit jedem Buchstaben beginnen.
Beachten Sie das einzeilige Zählmuster in Aktion.
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']);
}Kurzer Test
Sie möchten Zeichen mit genau einer Suche pro Zeichen zählen.
Zusammenfassung
Mit der entry-API können Sie in einer einzigen Suche einen Wert einfügen oder aktualisieren.
Sie haben or_insert, or_insert_with, or_default und and_modify verwendet, um Elemente zu zählen und übersichtlich Listen pro Schlüssel aufzubauen.
Häufig gestellte Fragen
Ist die Lektion „Entry-API und Standardwerte“ kostenlos?
Ja — der vollständige Text von „Entry-API und Standardwerte“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Learn Rust Coding-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Learn Rust Coding-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Entry-API und Standardwerte“?
Aktualisieren Sie Werte auf idiomatische Weise. Du übst Learn Rust Coding mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Learn Rust Coding zu starten?
Keine Vorkenntnisse erforderlich. Learn Rust Coding auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Entry-API und Standardwerte“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Learn Rust Coding-Lektion Code schreiben und ausführen?
Ja. Jede Learn Rust Coding-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Eine HashMap erstellen
- Entry-API und Standardwerte
- Mit HashSet arbeiten
- Zählen und gruppieren