Lær at programmere i Rust · Lektion

Slices

Lånte visninger

Lektion 2 af 413 trin

Slices er en gratis Lær at programmere i Rust-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lær at programmere i Rust, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lær at programmere i Rust-kurset indeholder 4 lektioner i alt.

Hvad er en slice?

En slice er en lånt visning af en sammenhængende del af en samling. Den ejer ikke data — den peger ind i eksisterende data.

Slices skrives med et interval i kantede parenteser.

fn main() {
    let arr = [1, 2, 3, 4, 5];
    let part = &arr[1..4];
    println!("{:?}", part);
}

Syntaks for slice-intervaller

Intervaller vælger et start- og slutindeks. Slutindekset er eksklusivt.

  • &v[1..4] — indeks 1, 2, 3.
  • &v[..3] — fra starten til 3.
  • &v[2..] — fra 2 til slutningen.
fn main() {
    let v = vec![10, 20, 30, 40];
    println!("{:?}", &v[..2]);
    println!("{:?}", &v[2..]);
}

Streng-slices

En streng-slice &str er en visning af en del af en String. Indeksintervaller angives efter byte-position.

fn main() {
    let s = String::from("hello world");
    let hello = &s[0..5];
    let world = &s[6..11];
    println!("{} {}", hello, world);
}

Slices af hele samlingen

Brug &v[..] til at lave en slice af hele samlingen. Sådan låner en Vec som en slice.

fn main() {
    let v = vec![1, 2, 3];
    let whole = &v[..];
    println!("{:?}", whole);
}

Slices som parametre

Funktioner, der tager &[T], accepterer både arrays og vektorer. Det gør dem fleksible.

fn sum(items: &[i32]) -> i32 {
    let mut total = 0;
    for x in items {
        total += x;
    }
    total
}

fn main() {
    let v = vec![1, 2, 3];
    let a = [4, 5, 6];
    println!("{} {}", sum(&v), sum(&a));
}

Slices låner, men ejer ikke

Fordi en slice låner, skal den oprindelige samling stadig være i live, mens slicen bruges. Compileren håndhæver dette.

fn main() {
    let v = vec![100, 200, 300];
    let s = &v[0..2];
    println!("slice {:?}, original {:?}", s, v);
}

Slicens længde

Ligesom andre samlinger har slices en len()-metode, der angiver antallet af elementer, de dækker.

fn main() {
    let v = vec![5, 6, 7, 8, 9];
    let middle = &v[1..4];
    println!("length {}", middle.len());
}

first og last

Slices indeholder first() og last(), som returnerer Option-værdier, så tomme slices håndteres sikkert.

fn main() {
    let data = [10, 20, 30];
    let s = &data[..];
    println!("{:?} {:?}", s.first(), s.last());
}

Iteration over en slice

Du kan iterere over en slice ligesom over enhver anden samling.

fn main() {
    let v = vec![1, 2, 3, 4];
    for x in &v[1..3] {
        println!("{}", x);
    }
}

En funktion til det første ord

Et almindeligt anvendelsestilfælde for slices er at returnere en slice ind i eksisterende tekst, f.eks. det første ord i en sætning.

fn first_word(s: &str) -> &str {
    let bytes = s.as_bytes();
    for (i, &b) in bytes.iter().enumerate() {
        if b == b' ' {
            return &s[0..i];
        }
    }
    s
}

fn main() {
    println!("{}", first_word("hello there"));
}

Hvorfor slices er sikre

Slices undgår at kopiere data og forhindrer samtidig hængende referencer. Lånekontrollen garanterer, at de underliggende data lever længere end slicen.

fn main() {
    let words = vec!["a", "b", "c", "d"];
    let pair = &words[1..3];
    println!("{:?}", pair);
}

Hurtigt tjek

Husk, hvad en slice repræsenterer.

Opsummering

Slices i Rust:

  • En lånt visning: &v[start..end], hvor slutningen er eksklusiv.
  • &str er en streng-slice; &[T] er en array- eller vektor-slice.
  • Slice-parametre accepterer både arrays og vektorer.
  • Lånekontrollen holder slices sikre.
fn average(nums: &[i32]) -> i32 {
    nums.iter().sum::<i32>() / nums.len() as i32
}

fn main() {
    let v = vec![4, 8, 12];
    println!("{}", average(&v[..]));
}
Gratis at komme i gang

Lær Rust med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
39
Lektioner
144

Ofte stillede spørgsmål

Er lektionen “Slices” gratis?

Ja — alle 3 lektioner i læringssporet Lær at programmere i Rust, inklusive “Slices”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lær at programmere i Rust-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Slices”?

Lånte visninger Du øver dig i Lær at programmere i Rust med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Lær at programmere i Rust?

Der kræves ingen tidligere erfaring. Lær at programmere i Rust på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Slices”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Lær at programmere i Rust-lektion?

Ja. Alle Lær at programmere i Rust-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. String kontra &str
  2. Slices
  3. String-metoder
  4. UTF-8 og chars
← Tilbage til Lær at programmere i Rust