Ce face Vec::starts_with
starts_with(&[a, b]) returnează true dacă primele elemente ale vectorului sunt exact a, apoi b. Perechea ei, ends_with, verifică ultimele elemente. Un slice gol este prefixul (și sufixul) oricărui vector.
Sunt utile pentru date binare (semnătura de la începutul unui fișier), pentru rute și căi împărțite în bucăți sau pentru comenzi formate din mai multe cuvinte.
Parametri
| Parametru | Descriere |
|---|---|
needle |
Slice-ul căutat la început (sau la sfârșit). |
Ce returnează
true sau false.
Exemple
Exemplul 1: Traseul trenului
fn main() {
let traseu = vec!["București", "Ploiești", "Brașov", "Sibiu"];
println!("{}", traseu.starts_with(&["București", "Ploiești"]));
println!("{}", traseu.starts_with(&["Brașov"]));
println!("{}", traseu.ends_with(&["Brașov", "Sibiu"]));
println!("{}", traseu.starts_with(&[]));
}
Rezultat
true
false
true
true
Exemplul 2: Tipul unui fișier după primii octeți
Formatele de fișiere încep cu o „semnătură” fixă. b"%PDF" este un șir de octeți. {:02X?} afișează octeții în hexazecimal.
fn tip_fisier(octeti: &[u8]) -> &'static str {
if octeti.starts_with(&[0x89, b'P', b'N', b'G']) {
"imagine PNG"
} else if octeti.starts_with(b"%PDF") {
"document PDF"
} else if octeti.starts_with(&[0xFF, 0xD8, 0xFF]) {
"imagine JPEG"
} else {
"necunoscut"
}
}
fn main() {
let fisiere = vec![
vec![0x89, b'P', b'N', b'G', 0x0D, 0x0A],
b"%PDF-1.7".to_vec(),
vec![0xFF, 0xD8, 0xFF, 0xE0],
vec![1, 2, 3],
];
for f in &fisiere {
println!("{:02X?} -> {}", &f[..3], tip_fisier(f));
}
}
Rezultat
[89, 50, 4E] -> imagine PNG
[25, 50, 44] -> document PDF
[FF, D8, FF] -> imagine JPEG
[01, 02, 03] -> necunoscut
Greșeli frecvente
- Dai un singur element în loc de slice:
v.starts_with("București")nu compilează. Scriev.starts_with(&["București"])sau comparăv.first() == Some(&"București"). - Confunzi cu
str::starts_withpentru text: aceea verifică un prefix de caractere, aceasta un prefix de elemente.
Comenzi înrudite
Vec::contains: Verifică dacă vectorul conține un element egal cu valoarea dată; parcurge elementele unul câte unul.Vec::first: first returnează primul element, last ultimul, ca Option: None dacă vectorul este gol.Vec::split_at: Împarte vectorul în două slice-uri la o poziție, fără copiere: elementele dinainte și elementele de la poziție încolo.Vec::windows: windows dă ferestre suprapuse de câte n elemente consecutive; chunks împarte vectorul în bucăți separate de câte n.