web-dev-qa-db-fra.com

Comment obtenir une tranche d'un Vec <T> dans Rust?

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];
30
yageek

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[..]);
}
48
Brian Campbell

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:

5
Shepmaster