vector - ¿Cómo obtengo una porción de un Vec<T> en Rust?
(2)
No puedo encontrar en la documentación de Vec<T>
cómo recuperar un sector de un rango específico.
¿Hay algo como esto en la biblioteca estándar:
let a = vec![1, 2, 3, 4];
let suba = a.subvector(0, 2); // Contains [1, 2];
La documentación para Vec
cubre esto en la sección titulada "rebanar" .
Puede crear una slice
de un Vec
o array
RangeFrom
con un Range
(o RangeFrom
, RangeTo
, RangeFull
), por ejemplo :
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 desea convertir todo el Vec
en una porción, puede usar deref coercion :
fn main() {
let a = vec![1, 2, 3, 4, 5];
let b: &[i32] = &a;
println!("{:?}", b);
}
Esta coerción se aplica automáticamente al llamar a una función:
fn print_it(b: &[i32]) {
println!("{:?}", b);
}
fn main() {
let a = vec![1, 2, 3, 4, 5];
print_it(&a);
}
También puedes llamar a Vec::as_slice
, pero es un poco menos común:
fn main() {
let a = vec![1, 2, 3, 4, 5];
let b = a.as_slice();
println!("{:?}", b);
}
Ver también:
- ¿Por qué no se recomienda aceptar una referencia a un String (& String), Vec (& Vec) o Box (& Box) como argumento de función?