Ce face Vec::contains
contains(&x) returnează true dacă măcar un element este egal cu x. Primește o referință la valoare, nu valoarea. Căutarea parcurge vectorul de la început, deci durează proporțional cu lungimea.
Pentru un Vec<String>, contains cere un &String, nu un &str. Varianta comodă este v.iter().any(|s| s == "text"). Dacă faci multe căutări în aceeași colecție mare, un HashSet răspunde mult mai repede.
Parametri
| Parametru | Descriere |
|---|---|
x |
Referință la valoarea căutată. |
Ce returnează
true sau false. Pentru poziția elementului folosește iter().position().
Exemple
Exemplul 1: E pe lista de invitați?
fn main() {
let invitati = vec!["Ana", "Mihai", "Ioana"];
for nume in ["Mihai", "Radu"] {
if invitati.contains(&nume) {
println!("{nume} este pe listă");
} else {
println!("{nume} nu este invitat");
}
}
}
Rezultat
Mihai este pe listă
Radu nu este invitat
Exemplul 2: Vec de String și căutare cu &str
fn main() {
let culori: Vec<String> = vec!["roșu".to_string(), "galben".to_string(), "albastru".to_string()];
// contains cere &String; cu un &str e mai comod iter().any
println!("{}", culori.contains(&"galben".to_string()));
println!("{}", culori.iter().any(|c| c == "verde"));
let note = vec![5, 8, 10];
println!("are vreun 10? {}", note.contains(&10));
}
Rezultat
true
false
are vreun 10? true
Greșeli frecvente
- Scrii
v.contains(10)fără&: expected `&{integer}`, found integer. - Pentru
Vec<String>scriiv.contains("Ana"): tipul nu se potrivește. Foloseștev.iter().any(|s| s == "Ana"). - Faci mii de
containspe un vector mare într-o buclă. Fiecare căutare parcurge tot vectorul; unHashSetare căutare aproape instantă.
Comenzi înrudite
Vec::binary_search: Caută rapid o valoare într-un vector sortat: Ok(poziție) dacă există, Err(poziție) unde ar trebui inserată.Iterator::any: any verifică dacă măcar un element îndeplinește condiția; all verifică dacă toate o îndeplinesc. Se opresc cât de repede pot.Iterator::position: Returnează poziția (indexul de la 0) primului element care îndeplinește condiția, sau None.HashSet::insert: insert adaugă o valoare (true dacă era nouă), contains verifică dacă există, remove o scoate (true dacă exista).Vec::starts_with: Verifică dacă vectorul începe cu elementele date (în aceeași ordine); ends_with verifică sfârșitul.