Zugriff auf Vektor-Elemente
Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 10 von 66.
Sobald Sie einen Vektor mit Elementen haben, müssen Sie auf einzelne Werte zugreifen. Rust bietet zwei verschiedene Ansätze, um Elemente aus einem Vektor abzurufen, wobei jeder seine eigenen Vor- und Nachteile in Bezug auf Komfort und Sicherheit hat.
Die erste Methode verwendet die Index-Syntax mit eckigen Klammern, ähnlich wie bei Arrays:
let numbers = vec![10, 20, 30, 40];
let first = numbers[0]; // liefert 10
let third = numbers[2]; // liefert 30Obwohl diese Syntax vertraut und prägnant ist, birgt sie ein erhebliches Risiko: Wenn Sie versuchen, auf einen Index zuzugreifen, der nicht existiert, wird Ihr Programm mit einer Panic abbrechen und abstürzen:
let numbers = vec![10, 20, 30];
let invalid = numbers[5]; // Dies wird eine Panic auslösen!Die zweite Methode verwendet die .get()-Methode, die sicheren Zugriff bietet:
let numbers = vec![10, 20, 30, 40];
let first = numbers.get(0); // gibt Some(10) zurück
let invalid = numbers.get(5); // gibt None zurückDie .get()-Methode gibt ein Option zurück – entweder Some(value), wenn der Index existiert, oder None, wenn er nicht existiert. Dies zwingt Sie dazu, die Möglichkeit zu behandeln, dass das Element nicht existiert, was Abstürze verhindert und Ihren Code robuster macht.
Aufgabe
EinfachSchreiben Sie eine Funktion get_element_at, die einen Vektor numbers und einen Index idx entgegennimmt und das Element an diesem Index unter Verwendung von sicherem Zugriff zurückgibt.
Verwenden Sie die Methode .get(), um sicher auf das Element zuzugreifen. Wenn der Index existiert, geben Sie den Wert zurück. Wenn der Index nicht existiert, geben Sie -1 als Standardwert zurück.
Parameter:
numbers(Vec<i32>): Der Vektor, auf den zugegriffen werden sollidx(i32): Der abzurufende Index
Rückgabewert: Das Element am angegebenen Index oder -1, falls der Index nicht existiert (i32)
Spickzettel
Rust bietet zwei Methoden für den Zugriff auf Vektorelemente:
Index-Syntax mit eckigen Klammern:
let numbers = vec![10, 20, 30, 40];
let first = numbers[0]; // liefert 10
let third = numbers[2]; // liefert 30Diese Methode führt zu einem Panic, wenn der Index nicht existiert:
let invalid = numbers[5]; // Dies wird einen Panic auslösen!Die .get()-Methode für sicheren Zugriff:
let numbers = vec![10, 20, 30, 40];
let first = numbers.get(0); // gibt Some(10) zurück
let invalid = numbers.get(5); // gibt None zurückDie .get()-Methode gibt einen Option-Typ zurück – entweder Some(value), wenn der Index existiert, oder None, wenn er nicht existiert. Dies verhindert Abstürze und erfordert eine explizite Behandlung fehlender Elemente.
Probier es selbst
fn get_element_at(numbers: Vec<i32>, idx: i32) -> i32 {
// Code hier schreiben
}
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