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]]