Iterator::nth în Rust

nth(n) returnează elementul de pe poziția n (de la 0) și îl consumă împreună cu cele dinainte; last returnează ultimul element.

Sintaxă
fn nth(&mut self, n: usize) -> Option<Self::Item>
fn last(self) -> Option<Self::Item>

Ce face Iterator::nth

nth(n) sare peste primele n elemente și returnează următorul, în Some; nth(0) este next(). Elementele sărite sunt consumate, deci două apeluri nth(0) dau elemente diferite. Dacă iteratorul are mai puțin de n + 1 elemente, rezultatul este None.

last() parcurge tot și returnează ultimul element. Pe iteratori care pot merge înapoi, next_back() îl dă direct. Pentru vectori, v.get(n) și v.last() sunt mai simple; nth e util pe iteratori fără indexare, de exemplu chars() (al n-lea caracter, nu octet).

Parametri

Parametru Descriere
n Poziția elementului cerut, numărată de la elementul curent.

Ce returnează

Option<Self::Item>.

Exemple

Exemplul 1: Al n-lea caracter și ultimul cuvânt

fn main() {
    let oras = "Târgu Mureș";
    println!("al 2-lea caracter: {:?}", oras.chars().nth(1));
    println!("al 50-lea: {:?}", oras.chars().nth(49));
    println!("ultimul cuvânt: {:?}", oras.split_whitespace().last());
}

Rezultat

al 2-lea caracter: Some('â')
al 50-lea: None
ultimul cuvânt: Some("Mureș")

Exemplul 2: nth consumă elementele

fn main() {
    let mut it = [10, 20, 30, 40, 50].into_iter();
    println!("{:?}", it.nth(1));
    println!("{:?}", it.nth(1));
    println!("{:?}", it.nth(0));
    println!("{:?}", it.nth(0));
}

Rezultat

Some(20)
Some(40)
Some(50)
None

Greșeli frecvente

  • Te aștepți ca nth să numere de la 1: nth(1) este al doilea element.
  • Folosești s.chars().nth(i) într-o buclă pe un text lung: fiecare apel pornește de la început. Colectează o dată Vec<char> sau parcurge cu chars().enumerate().

Comenzi înrudite

  • Iterator::take: take(n) produce cel mult primele n elemente; skip(n) sare peste primele n și produce restul.
  • DoubleEndedIterator: Iterator care poate produce valori și de la coadă (next_back); permite rev(), rfind() și parcurgerea din ambele capete.
  • Vec::get: Citește elementul de pe o poziție fără risc de panic: returnează Some(&element) sau None dacă poziția nu există.
  • Vec::first: first returnează primul element, last ultimul, ca Option: None dacă vectorul este gol.