gpt4 book ai didi

vector - 如何返回 Vec 的子集?

转载 作者:行者123 更新时间:2023-11-29 08:27:41 26 4
gpt4 key购买 nike

我试图避免复制数据,因为必须将此程序的内存使用保持在较低水平。

我看到您可以执行以下操作:

fn subset<'a>(csv: &Vec<&'a Vec<bool>>, indices: &Vec<usize>) -> Vec<&'a Vec<bool>> {
indices.iter().map(|&i| &csv[i]).collect();
}

但是我的数据源其实是一个&Vec<Vec<bool>>不是&Vec<&Vec<bool>>'a单独使用是行不通的。

最佳答案

你的 'a只是放错了地方。

生命周期总是与引用一起使用,所以如果你有一个 &Vec<Vec<bool>>然后一生'a& 之后出现.你不需要也不应该洒& nilly-willy 因为你拥有的东西 ( i32 ) 和你引用的东西 ( &i32 ) 之间有非常明显的区别。

因此,您函数的正确版本是:

fn subset<'a>(csv: &'a Vec<Vec<bool>>, indices: &Vec<usize>) -> Vec<&'a Vec<bool>> {
indices.iter().map(|&i|&csv[i]).collect()
}

注意:我删除了 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);
}

哪个produces :

[[false, false, true], [false, true, false], [true, true, true], [true, false, false]]

关于vector - 如何返回 Vec 的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32401099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com