如何在Rust中获得一片Vec <t>?

时间:2016-09-30 07:03:52

标签: vector rust

我在Vec<T>的文档中找不到如何从指定范围中检索切片。

标准库中是否存在类似内容:

let a = vec![1, 2, 3, 4];
let suba = a.subvector(0, 2); // Contains [1, 2];

2 个答案:

答案 0 :(得分:43)

Vec的文档涵盖了the section titled "slicing"

您可以使用slice(或Vecarray,{对其进行索引来创建RangeRangeFromRangeTo {3}}),RangeFull

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

答案 1 :(得分:3)

如果您希望将整个Vec转换为切片,可以使用 deref强制

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

    println!("{:?}", b);
}

调用函数时会自动应用此强制:

fn print_it(b: &[i32]) {
    println!("{:?}", b);
}

fn main() {
    let a = vec![1, 2, 3, 4, 5];
    print_it(&a);
}

您也可以致电Vec::as_slice,但不太常见:

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

另见: