web-dev-qa-db-ja.com

RustでVec <T>のスライスを取得するにはどうすればよいですか?

Vec<T>のドキュメント内で、指定された範囲からスライスを取得する方法が見つかりません。

標準ライブラリには次のようなものがあります:

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

Vecのドキュメントは、これを 「スライス」というタイトルのセクション でカバーしています。

sliceVec または array を作成するには、 a Range (または RangeFromRangeToRangeFull )、 たとえば

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

Vec全体をスライスに変換する場合は、deref coercionを使用できます。

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);
}

こちらもご覧ください:

5
Shepmaster