[英]Is it possible to store the memory location from an iterator into a pointer?
[英]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>>();
}
我想我可以返回一個克隆版本,但這是唯一/首選的方法嗎?
不,這是不可能的。 為了實現這一點, collect
必須返回對它創建的東西的引用, 這是不可能的 。
您正在尋找Vec::retain
:
fn search(word: &str, data: &mut Vec<String>) {
data.retain(|x| x.contains(word));
}
如果你不想改變傳入的數據,你確實需要返回一個新的Vec
:
fn search<'a>(word: &str, data: &'a [String]) -> Vec<&'a String> {
data.iter().filter(|x| x.contains(word)).collect()
}
也可以看看:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.