Vector 如何返回Vec的子集?
我试图避免复制数据,因为这个程序的内存使用量必须保持较低 我已经看到,您可以执行以下操作:Vector 如何返回Vec的子集?,vector,rust,subset,slice,lifetime,Vector,Rust,Subset,Slice,Lifetime,我试图避免复制数据,因为这个程序的内存使用量必须保持较低 我已经看到,您可以执行以下操作: fn subset<'a>(csv: &Vec<&'a Vec<bool>>, indices: &Vec<usize>) -> Vec<&'a Vec<bool>> { indices.iter().map(|&i| &csv[i]).collect(); } fn子集
fn subset<'a>(csv: &Vec<&'a Vec<bool>>, indices: &Vec<usize>) -> Vec<&'a Vec<bool>> {
indices.iter().map(|&i| &csv[i]).collect();
}
fn子集,索引:&Vec)->Vec你的'a
简直是放错地方了
生存期始终与引用一起使用,因此如果您有&Vec
,则生存期'A
紧跟在&
之后。你不需要,也不应该随意地散布&
,因为你拥有的东西(i32
)和你提到的东西(&i32
)之间有着非常明显的区别
因此,函数的正确版本就是:
fn subset<'a>(csv: &'a Vec<Vec<bool>>, indices: &Vec<usize>) -> Vec<&'a Vec<bool>> {
indices.iter().map(|&i|&csv[i]).collect()
}
其中:
fn main() {
let vec = vec!(
vec!(false, false, false),
vec!(false, false, true ),
vec!(false, true , true ),
vec!(false, true , false),
vec!(true , true , false),
vec!(true , true , true ),
vec!(true , false, true ),
vec!(true , false, false)
);
let indices = vec!(1, 3, 5, 7);
let sub = subset(&vec, &indices);
println!("{:?}", sub);
}
[[false, false, true], [false, true, false], [true, true, true], [true, false, false]]