Veränderliche Iteration
Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 12 von 66.
Manchmal müssen Sie mehr tun, als Vektorelemente nur zu lesen – Sie müssen sie verändern. Während die vorherige Lektion gezeigt hat, wie man Werte iteriert und liest, lehrt Sie diese Lektion, wie Sie die Elemente während der Iteration mithilfe von veränderlichen Referenzen (mutable references) ändern.
Um Elemente während der Iteration zu verändern, müssen Sie &mut anstelle von & in Ihrer for-Schleife verwenden:
let mut numbers = vec![1, 2, 3, 4];
for number in &mut numbers {
*number = *number * 2;
}&mut numbers erzeugt eine veränderliche Referenz auf den Vektor, und jede Iteration liefert eine veränderliche Referenz auf ein einzelnes Element. Der *-Operator (auch Dereferenzierungsoperator genannt) wird verwendet, um auf den eigentlichen Wert zuzugreifen und diesen zu verändern, auf den die Referenz zeigt.
Dieses Muster ist unglaublich nützlich, um Daten direkt an Ort und Stelle (in place) zu transformieren. Anstatt einen neuen Vektor mit geänderten Werten zu erstellen, können Sie den bestehenden effizient aktualisieren. Der Vektor muss als mut deklariert sein, damit dies funktioniert, da Sie seinen Inhalt ändern.
Nach der obigen Schleife würde numbers [2, 4, 6, 8] enthalten – jeder ursprüngliche Wert an Ort und Stelle verdoppelt.
Aufgabe
EinfachSchreibe eine Funktion add_ten_to_all, die einen veränderbaren Vektor numbers entgegennimmt, zu jedem Element in-place 10 addiert und dann den veränderten Vektor zurückgibt.
Verwende veränderbare Iteration mit &mut, um jedes Element direkt zu verändern. Denke daran, den Dereferenzierungsoperator * zu verwenden, um auf die tatsächlichen Werte zuzugreifen und diese zu verändern.
Parameter:
numbers(Vec<i32>): Ein veränderbarer Vektor aus Ganzzahlen, der verändert werden soll
Rückgabe: Der veränderte Vektor, bei dem zu jedem Element 10 addiert wurde (Vec<i32>)
Probier es selbst
fn add_ten_to_all(mut numbers: Vec<i32>) -> Vec<i32> {
// Schreibe hier den Code
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Fortgeschrittener Kontrollfluss
Der 'match'-AusdruckAbgleichen mehrerer WerteBereiche abgleichenDer 'if let'-AusdruckSchleifen als AusdrückeRückblick – Einfacher Befehls-Parser4Daten gruppieren mit Structs
Was ist ein Struct?Übersicht über StructsZugriff auf Struct-FelderVeränderbare StructsStructs als FunktionsparameterTupel-StructsZusammenfassung – Ein Buch-Struct erstellen2Einführung in Vektoren
Was ist ein Vektor?Einen Vektor erstellenElemente mit push hinzufügenZugriff auf Vektor-ElementeÜber einen Vektor iterierenVeränderliche IterationElemente entfernenZusammenfassung – Einfacher Score-Tracker5Schlüssel-Wert-Paare mit Hash Maps
Was ist eine Hash Map?Erstellen einer Hash MapEinfügen von Schlüssel-Wert-PaarenZugreifen auf WerteIterieren über eine Hash MapAktualisieren eines WertesEntfernen eines PaaresZusammenfassung – Wortzähler8Projekt: Einfaches Artikelinventar
Projekt-SetupEinen Artikel hinzufügenLagerbestand prüfenEinen Artikel verkaufenAlles zusammenfügen11Abschluss-Herausforderungen
Wiederholung - Einzigartige ElementeWiederholung - Benutzerprofil-ValidatorWiederholung - Noten-Zusammenfassung3Kommandozeilen-To-Do-Liste
Projekt-SetupEine Aufgabe hinzufügenAlle Aufgaben anzeigenEine Aufgabe entfernenFinaler Code