Weitere Slices
Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 57 von 66.
Während String-Slices sehr nützlich sind, ist das Slicing nicht nur auf Strings beschränkt. Rusts Slice-Konzept erstreckt sich auf jede Sequenz von Elementen, was es zu einem leistungsstarken Werkzeug für die Arbeit mit Collections macht, ohne Ownership zu übernehmen.
Sie können Slices aus Arrays und Vektoren mit derselben Syntax erstellen, die Sie für Strings gelernt haben. Wenn Sie beispielsweise ein Array von Zahlen haben, können Sie ein Slice erstellen, das einen Teil oder das gesamte Array referenziert:
let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // Dies ergibt [2, 3, 4]
let full_slice: &[i32] = &numbers; // Dies referenziert das gesamte ArrayDasselbe Prinzip funktioniert auch bei Vektoren. Sie können Slices aus Vektoren erstellen, um mit Teilen der Daten zu arbeiten, ohne diese zu verschieben oder zu kopieren:
let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // Dies ergibt [10, 20]Aufgabe
EinfachSie erhalten drei Eingaben. Die erste Eingabe ist eine durch Kommas getrennte Liste von Zahlen. Die zweite Eingabe besteht aus zwei durch ein Leerzeichen getrennten Zahlen, die den Start- und Endindex für die Erstellung eines Slices darstellen. Die dritte Eingabe ist eine einzelne Zahl, die einen Index darstellt, auf den innerhalb des Slices zugegriffen werden soll.
Erstellen Sie einen Vektor aus den durch Kommas getrennten Zahlen und erstellen Sie dann einen Slice unter Verwendung des angegebenen Bereichs. Greifen Sie auf das Element am angegebenen Index aus dem Slice zu und geben Sie es aus.
Anforderungen:
- Lesen Sie die erste Eingabe (durch Kommas getrennte Zahlen) und entfernen Sie Leerzeichen am Anfang und Ende
- Teilen Sie die Eingabe nach Kommas auf und parsen Sie jede Zahl zu
i32 - Erstellen Sie einen Vektor aus diesen Zahlen
- Lesen Sie die zweite Eingabe (zwei durch ein Leerzeichen getrennte Zahlen) und entfernen Sie Leerzeichen am Anfang und Ende
- Teilen Sie die zweite Eingabe nach Leerzeichen auf, um den Start- und Endindex zu erhalten
- Parsen Sie beide Indizes zu
usize - Erstellen Sie einen Slice aus dem Vektor unter Verwendung der Bereichssyntax
&vec[start..end] - Lesen Sie die dritte Eingabe (Index für den Zugriff) und entfernen Sie Leerzeichen am Anfang und Ende
- Parsen Sie den Index zu
usize - Greifen Sie auf das Element am angegebenen Index aus dem Slice zu
- Geben Sie das aufgerufene Element aus
Eingabe:
- Erste Zeile: Durch Kommas getrennte Zahlen (z. B.
10,20,30,40,50) - Zweite Zeile: Zwei durch ein Leerzeichen getrennte Zahlen (z. B.
1 4) - Dritte Zeile: Eine Indexnummer (z. B.
2)
Ausgabe:
- Das Element am angegebenen Index aus dem Slice
Spickzettel
Slices können aus Arrays und Vektoren erstellt werden, nicht nur aus Strings. Sie referenzieren einen Teil einer Kollektion, ohne den Besitz zu übernehmen.
Erstellen von Slices aus Arrays:
let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // Referenziert [2, 3, 4]
let full_slice: &[i32] = &numbers; // Referenziert das gesamte ArrayErstellen von Slices aus Vektoren:
let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // Referenziert [10, 20]Slices verwenden dieselbe Range-Syntax wie String-Slices und ermöglichen es Ihnen, mit Teilen von Daten zu arbeiten, ohne diese zu verschieben oder zu kopieren.
Probier es selbst
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// Erste Eingabe lesen (kommagetrennte Zahlen)
let first_input = lines.next().unwrap().unwrap();
// Zweite Eingabe lesen (Start- und End-Indizes)
let second_input = lines.next().unwrap().unwrap();
// Dritte Eingabe lesen (zuzugreifender Index)
let third_input = lines.next().unwrap().unwrap();
// TODO: Schreiben Sie Ihren Code unten
// Die kommagetrennten Zahlen parsen und einen Vektor erstellen
// Die Start- und End-Indizes parsen
// Einen Slice aus dem Vektor erstellen
// Auf das Element am angegebenen Index aus dem Slice zugreifen
// Das Ergebnis ausgeben
// println!("{}", result);
}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 Code6Umgang mit fehlenden Werten mit 'Option'
Was ist ein 'Option'?'match' mit 'Option' verwendenis_some() und is_none()Ein 'Option' entpackenDie 'expect'-MethodeStandardwert bereitstellen: unwrap_orRückblick – Ein Element finden9String-Slices und mehr
String vs. &strString-Slices erstellenSlices als FunktionsparameterWeitere SlicesRückblick – Das erste Wort finden