Ce face Iterator::any
any(|x| cond) returnează true la primul element care îndeplinește condiția și nu mai verifică restul. all(|x| cond) returnează false la primul element care nu o îndeplinește. Pentru un iterator gol, any dă false, iar all dă true („toate cele zero elemente îndeplinesc condiția”).
Spre deosebire de filter, closure-ul primește elementul prin valoare (Self::Item), deci pe v.iter() primești &T, nu &&T. Ambele cer &mut self: iteratorul rămâne utilizabil după oprire, de la elementul următor.
Parametri
| Parametru | Descriere |
|---|---|
f |
Condiția aplicată fiecărui element. |
Ce returnează
bool.
Exemple
Exemplul 1: Corigențe și promovare
fn main() {
let note = [8, 4, 9, 10];
println!("are vreo notă sub 5? {}", note.iter().any(|&n| n < 5));
println!("toate sunt de trecere? {}", note.iter().all(|&n| n >= 5));
let goale: [u32; 0] = [];
println!("gol: any = {}, all = {}", goale.iter().any(|&n| n > 0), goale.iter().all(|&n| n > 0));
}
Rezultat
are vreo notă sub 5? true
toate sunt de trecere? false
gol: any = false, all = true
Exemplul 2: Verificarea unei parole
fn main() {
for parola in ["parola", "Parola123", "P@rola2026"] {
let are_cifra = parola.chars().any(|c| c.is_ascii_digit());
let are_mare = parola.chars().any(|c| c.is_uppercase());
let are_simbol = parola.chars().any(|c| !c.is_alphanumeric());
let doar_ascii = parola.chars().all(|c| c.is_ascii());
let ok = parola.len() >= 8 && are_cifra && are_mare && are_simbol && doar_ascii;
println!("{parola:12} -> {}", if ok { "puternică" } else { "slabă" });
}
}
Rezultat
parola -> slabă
Parola123 -> slabă
P@rola2026 -> puternică
Exemplul 3: any se oprește la primul găsit
fn main() {
let numere = [3, 8, 12, 5, 20];
let gasit = numere.iter().any(|&n| {
println!(" verific {n}");
n > 10
});
println!("există un număr peste 10: {gasit}");
}
Rezultat
verific 3
verific 8
verific 12
există un număr peste 10: true
Greșeli frecvente
- Scrii
filter(..).count() > 0saufilter(..).next().is_some():anye mai scurt și se oprește la fel de repede. - Te aștepți ca
allpe o listă goală să deafalse. Dătrue; verifică șiis_empty()dacă lista goală trebuie tratată separat.
Comenzi înrudite
Iterator::find: Returnează primul element care îndeplinește condiția, în Some, sau None dacă niciunul nu o îndeplinește.Iterator::position: Returnează poziția (indexul de la 0) primului element care îndeplinește condiția, sau None.Vec::contains: Verifică dacă vectorul conține un element egal cu valoarea dată; parcurge elementele unul câte unul.Iterator::filter: Păstrează doar elementele pentru care condiția dată returnează true; restul sunt sărite.Vec::windows: windows dă ferestre suprapuse de câte n elemente consecutive; chunks împarte vectorul în bucăți separate de câte n.