Dan*_*uno 3 iterator vector ownership rust
我想了解更多有关所有权的信息.这是一些不起作用的代码,因为collect
不会让你得到&mut String
:
fn search(word: &str, data: &mut Vec<String>) {
data = data
.iter()
.filter(|x| x.contains(word))
.collect::<&mut Vec<String>>();
}
Run Code Online (Sandbox Code Playgroud)
我想我可以返回一个克隆版本,但这是唯一/首选的方法吗?
不,这是不可能的.为了实现这一点,collect
必须返回对它创建的东西的引用,这是不可能的.
您正在寻找Vec::retain
:
fn search(word: &str, data: &mut Vec<String>) {
data.retain(|x| x.contains(word));
}
Run Code Online (Sandbox Code Playgroud)
如果你不想改变传入的数据,你确实需要返回一个新的Vec
:
fn search<'a>(word: &str, data: &'a [String]) -> Vec<&'a String> {
data.iter().filter(|x| x.contains(word)).collect()
}
Run Code Online (Sandbox Code Playgroud)
也可以看看:
归档时间: |
|
查看次数: |
72 次 |
最近记录: |