可以从迭代器中收集 &mut 吗?
It is possible to collect a &mut from an iterator?
我想了解更多关于所有权的信息。这是一些不起作用的代码,因为 collect
不允许您获得 &mut String
:
fn search(word: &str, data: &mut Vec<String>) {
data = data
.iter()
.filter(|x| x.contains(word))
.collect::<&mut Vec<String>>();
}
我想我可以 return 一个克隆版本,但这是 only/preferred 的方式吗?
不,这是不可能的。为此,collect
必须 return 对其创建的内容的引用,并且 that's not possible.
您正在寻找Vec::retain
:
fn search(word: &str, data: &mut Vec<String>) {
data.retain(|x| x.contains(word));
}
如果您不想改变传入的数据,您确实需要 return 一个新的 Vec
:
fn search<'a>(word: &str, data: &'a [String]) -> Vec<&'a String> {
data.iter().filter(|x| x.contains(word)).collect()
}
另请参阅:
- Is there any way to return a reference to a variable created in a function?
我想了解更多关于所有权的信息。这是一些不起作用的代码,因为 collect
不允许您获得 &mut String
:
fn search(word: &str, data: &mut Vec<String>) {
data = data
.iter()
.filter(|x| x.contains(word))
.collect::<&mut Vec<String>>();
}
我想我可以 return 一个克隆版本,但这是 only/preferred 的方式吗?
不,这是不可能的。为此,collect
必须 return 对其创建的内容的引用,并且 that's not possible.
您正在寻找Vec::retain
:
fn search(word: &str, data: &mut Vec<String>) {
data.retain(|x| x.contains(word));
}
如果您不想改变传入的数据,您确实需要 return 一个新的 Vec
:
fn search<'a>(word: &str, data: &'a [String]) -> Vec<&'a String> {
data.iter().filter(|x| x.contains(word)).collect()
}
另请参阅:
- Is there any way to return a reference to a variable created in a function?