[英]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
(或RangeInclusive
、 RangeFrom
、 RangeTo
、 RangeToInclusive
或RangeFull
)對其進行索引來創建Vec
或array
的slice
, 例如:
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.