Ce face Iterator::step_by
step_by(n) dă elementul de pe poziția 0, apoi pe cele de pe pozițiile n, 2n, 3n etc. Pe un interval, (0..=20).step_by(5) dă 0, 5, 10, 15, 20. Pe un vector, ia fiecare al n-lea element.
Pasul trebuie să fie cel puțin 1; step_by(0) oprește programul cu panic. Pentru pași înapoi, pune rev() înainte: (0..=10).rev().step_by(2). Ca toate adaptoarele, este leneș: nu face nimic până când iteratorul nu este consumat (de for, collect, sum, count etc.).
Parametri
| Parametru | Descriere |
|---|---|
step |
Pasul (cel puțin 1). |
Ce returnează
Un iterator StepBy.
Exemple
Exemplul 1: Intervale cu pas
fn main() {
let din_5_in_5: Vec<u32> = (0..=20).step_by(5).collect();
println!("{:?}", din_5_in_5);
let impare: Vec<u32> = (1..10).step_by(2).collect();
println!("{:?}", impare);
let inapoi: Vec<u32> = (0..=10).rev().step_by(3).collect();
println!("{:?}", inapoi);
}
Rezultat
[0, 5, 10, 15, 20]
[1, 3, 5, 7, 9]
[10, 7, 4, 1]
Exemplul 2: Fiecare a doua zi și orele unei ture
fn main() {
let zile = ["luni", "marți", "miercuri", "joi", "vineri", "sâmbătă", "duminică"];
let alternativ: Vec<&str> = zile.iter().step_by(2).copied().collect();
println!("la sală: {:?}", alternativ);
for minut in (0..60).step_by(15) {
print!("08:{minut:02} ");
}
println!();
}
Rezultat
la sală: ["luni", "miercuri", "vineri", "duminică"]
08:00 08:15 08:30 08:45
Greșeli frecvente
- Apelezi
step_by(0)(de exemplu cu un pas calculat): assertion failed: step != 0. - Te aștepți ca
step_bysă sară primul element: primul este mereu inclus. Puneskip(1)înainte dacă vrei să începi de la al doilea.
Comenzi înrudite
Range: Intervalul a..b: toate valorile de la a inclusiv până la b exclusiv. Este iterator, se folosește în for și la tăierea slice-urilor.Iterator::take: take(n) produce cel mult primele n elemente; skip(n) sare peste primele n și produce restul.Iterator::rev: Inversează direcția unui iterator: produce elementele de la ultimul la primul, fără să copieze nimic.Vec::windows: windows dă ferestre suprapuse de câte n elemente consecutive; chunks împarte vectorul în bucăți separate de câte n.