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
nthsă 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 cuchars().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.