Je ne trouve pas dans la documentation de Vec<T>
comment récupérer une tranche d'une plage spécifiée.
Y a-t-il quelque chose comme ça dans la bibliothèque standard:
let a = vec![1, 2, 3, 4];
let suba = a.subvector(0, 2); // Contains [1, 2];
La documentation de Vec
couvre cela dans la section intitulée "slicing" .
Vous pouvez créer un slice
d'un Vec
ou array
en l'indexant avec a Range
(ou RangeFrom
, RangeTo
, RangeFull
), par exemple :
fn main() {
let a = vec![1, 2, 3, 4, 5];
// With a start and an end
println!("{:?}", &a[1..4]);
// With just a start
println!("{:?}", &a[2..]);
// With just an end
println!("{:?}", &a[..3]);
// All elements
println!("{:?}", &a[..]);
}
Si vous souhaitez convertir l'intégralité de Vec
en une tranche, vous pouvez utiliser la contrainte deref :
fn main() {
let a = vec![1, 2, 3, 4, 5];
let b: &[i32] = &a;
println!("{:?}", b);
}
Cette contrainte est automatiquement appliquée lors de l'appel d'une fonction:
fn print_it(b: &[i32]) {
println!("{:?}", b);
}
fn main() {
let a = vec![1, 2, 3, 4, 5];
print_it(&a);
}
Vous pouvez également appeler Vec::as_slice
, mais c'est un peu moins courant:
fn main() {
let a = vec![1, 2, 3, 4, 5];
let b = a.as_slice();
println!("{:?}", b);
}
Voir également: