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

yag*_*eek 31 vector rust

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

标准库中是否有类似的东西:

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

Bri*_*ell 55

文档Vec标题为"切片"的部分中介绍了这一点.

您可以创建slice一个的Vecarray通过与索引它Range(或RangeInclusive,RangeFrom,RangeTo),例如:

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[..]);
}
Run Code Online (Sandbox Code Playgroud)


She*_*ter 9

如果您希望将整个部分转换Vec为切片,则可以使用deref coercion

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

    println!("{:?}", b);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

也可以看看:

  • +1 我比“[..]”更喜欢“.as_slice()”,因为它传达了意图。(将 Vec 转换为切片,因为只有切片(而不是 Vec)实现了“io::Read”。) (6认同)