簡體   English   中英

我如何獲得一片 Vec<T> 在銹?

[英]How do I get a slice of a Vec<T> in Rust?

我在Vec<T>的文檔中找不到如何從指定范圍檢索切片。

標准庫中是否有這樣的東西:

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

Vec的文檔在標題為“切片”的部分中涵蓋了這一點。

您可以通過使用Range (或RangeInclusiveRangeFromRangeToRangeToInclusiveRangeFull )對其進行索引來創建Vecarrayslice例如

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

如果您希望將整個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);
}

另見:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM