How do I get a slice of a Vec in Rust?

前端 未结 2 737
执笔经年
执笔经年 2020-12-24 10:55

I can not find within the documentation of Vec how to retrieve a slice from a specified range.

Is there something like this in the standard li

相关标签:
2条回答
  • 2020-12-24 11:12

    If you wish to convert the entire Vec to a slice, you can use deref coercion:

    fn main() {
        let a = vec![1, 2, 3, 4, 5];
        let b: &[i32] = &a;
    
        println!("{:?}", b);
    }
    

    This coercion is automatically applied when calling a function:

    fn print_it(b: &[i32]) {
        println!("{:?}", b);
    }
    
    fn main() {
        let a = vec![1, 2, 3, 4, 5];
        print_it(&a);
    }
    

    You can also call Vec::as_slice, but it's a bit less common:

    fn main() {
        let a = vec![1, 2, 3, 4, 5];
        let b = a.as_slice();
        println!("{:?}", b);
    }
    

    See also:

    • Why is it discouraged to accept a reference to a String (&String), Vec (&Vec), or Box (&Box) as a function argument?
    0 讨论(0)
  • 2020-12-24 11:27

    The documentation for Vec covers this in the section titled "slicing".

    You can create a slice of a Vec or array by indexing it with a Range (or RangeInclusive, RangeFrom, RangeTo, RangeToInclusive, or RangeFull), for example:

    fn main() {
        let a = vec![1, 2, 3, 4, 5];
    
        // With a start and an end
        println!("{:?}", &a[1..4]);
    
        // With a start and an end, inclusive
        println!("{:?}", &a[1..=3]);
    
        // With just a start
        println!("{:?}", &a[2..]);
    
        // With just an end
        println!("{:?}", &a[..3]);
    
        // With just an end, inclusive
        println!("{:?}", &a[..=2]);
    
        // All elements
        println!("{:?}", &a[..]);
    }
    
    0 讨论(0)
提交回复
热议问题