Ce face iter::repeat
std::iter::repeat(x) produce x (clonat) de fiecare dată când i se cere un element, fără sfârșit. Se folosește cu take(n) pentru n copii sau cu zip, unde celălalt șir decide lungimea. repeat_n(x, n) dă direct n copii.
Pentru text există mai simplu "-".repeat(20), iar pentru vectori vec![x; n]. repeat este util când ai nevoie de valori repetate într-un lanț de iteratori.
Parametri
| Parametru | Descriere |
|---|---|
elt |
Valoarea repetată (trebuie să implementeze Clone). |
Ce returnează
Un iterator infinit Repeat (sau finit, RepeatN).
Exemple
Exemplul 1: Copii ale unei valori
use std::iter::{repeat, repeat_n};
fn main() {
let linie: String = repeat('=').take(20).collect();
println!("{linie}");
let initiale: Vec<u32> = repeat_n(5, 3).collect();
println!("{:?}", initiale);
let felicitari: Vec<String> = ["Ana", "Mihai"].iter().zip(repeat("La mulți ani")).map(|(n, m)| format!("{m}, {n}!")).collect();
println!("{:?}", felicitari);
}
Rezultat
====================
[5, 5, 5]
["La mulți ani, Ana!", "La mulți ani, Mihai!"]
Exemplul 2: Completarea unui tabel până la o lungime fixă
use std::iter::repeat;
fn main() {
let note = vec![9, 7];
let complet: Vec<String> = note
.iter()
.map(|n| n.to_string())
.chain(repeat(String::from("-")))
.take(5)
.collect();
println!("{}", complet.join(" | "));
}
Rezultat
9 | 7 | - | - | -
Greșeli frecvente
- Colectezi
repeat(x)fărătake: programul nu se mai oprește. - Folosești
repeatpentru un vector simplu:vec![x; n]e mai clar.
Comenzi înrudite
Iterator::take: take(n) produce cel mult primele n elemente; skip(n) sare peste primele n și produce restul.Iterator::cycle: Repetă la nesfârșit elementele iteratorului: după ultimul, o ia de la capăt.iter::once: once(x) creează un iterator cu un singur element; empty() creează un iterator fără niciun element.Vec::resize: Schimbă lungimea vectorului: îl taie dacă e prea lung sau adaugă copii ale unei valori până la noua lungime.