Ce face Vec::len
len() returnează câte elemente are vectorul, ca usize (întreg fără semn, de mărimea unei adrese de memorie). Valoarea este ținută în vector, deci apelul este instant, oricât de mare ar fi vectorul.
is_empty() este echivalent cu len() == 0, dar se citește mai clar. Ultimul element valid este pe poziția len() - 1.
Pentru că rezultatul este usize, calculele cu el au nevoie de conversii: media se calculează cu suma as f64 / v.len() as f64. Atenție: v.len() - 1 pe un vector gol nu dă -1, ci oprește programul (depășire la scădere).
Ce returnează
len: numărul de elemente (usize). is_empty: true dacă nu există elemente.
Exemple
Exemplul 1: Numărul de elemente
fn main() {
let note: Vec<u32> = vec![10, 9, 8];
let absente: Vec<u32> = Vec::new();
println!("note: len = {}, is_empty = {}", note.len(), note.is_empty());
println!("absente: len = {}, is_empty = {}", absente.len(), absente.is_empty());
}
Rezultat
note: len = 3, is_empty = false
absente: len = 0, is_empty = true
Exemplul 2: Media, fără împărțire la zero
Verificăm întâi is_empty(). Funcția returnează Option, ca apelantul să știe că pentru o listă goală nu există medie.
fn media(note: &[u32]) -> Option<f64> {
if note.is_empty() {
return None;
}
let suma: u32 = note.iter().sum();
Some(suma as f64 / note.len() as f64)
}
fn main() {
println!("{:?}", media(&[9, 10, 7]));
println!("{:?}", media(&[10, 9]));
println!("{:?}", media(&[]));
}
Rezultat
Some(8.666666666666666)
Some(9.5)
None
Exemplul 3: Elemente, nu octeți
Pentru un String, len() numără octeții UTF-8 („ș” are 2 octeți). Un Vec<char> are câte un element pe literă.
fn main() {
let oras = "Brașov";
let litere: Vec<char> = oras.chars().collect();
println!("{} octeți în text, {} elemente în Vec<char>", oras.len(), litere.len());
println!("ultima literă: {}", litere[litere.len() - 1]);
}
Rezultat
7 octeți în text, 6 elemente în Vec<char>
ultima literă: v
Greșeli frecvente
- Scrii
v[v.len() - 1]pe un vector care poate fi gol.0 - 1peusizeoprește programul cu attempt to subtract with overflow. Foloseștev.last(), care returneazăOption. - Compari
v.len()cu uni32: mismatched types. Convertește explicit (n as usize) sau declară variabila causize. - Confunzi
len()cucapacity(): capacitatea este locul rezervat, nu numărul de elemente.
Comenzi înrudite
Vec: Vectorul dinamic din Rust: o listă de elemente de același tip, ținute unul după altul în memorie, care crește singură.Vec::with_capacity: Creează un vector cu loc rezervat dinainte; capacity spune cât loc are, iar reserve mărește locul fără să adauge elemente.Vec::first: first returnează primul element, last ultimul, ca Option: None dacă vectorul este gol.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ă.HashMap::len: len spune câte perechi cheie-valoare are dicționarul, is_empty dacă nu are niciuna, iar clear le șterge pe toate.