Vector 可以收集a&;来自迭代器的mut?

Vector 可以收集a&;来自迭代器的mut?,vector,iterator,rust,ownership,Vector,Iterator,Rust,Ownership,我正在努力学习更多关于所有权的知识。下面是一些不起作用的代码,因为collect不允许您获取&mut字符串: fn search(word: &str, data: &mut Vec<String>) { data = data .iter() .filter(|x| x.contains(word)) .collect::<&mut Vec<String>>(); } fn搜索

我正在努力学习更多关于所有权的知识。下面是一些不起作用的代码,因为
collect
不允许您获取
&mut字符串

fn search(word: &str, data: &mut Vec<String>) {
    data = data
        .iter()
        .filter(|x| x.contains(word))
        .collect::<&mut Vec<String>>();
}
fn搜索(单词:&str,数据:&mut-Vec){
数据=数据
.国际热核实验堆(iter)
.filter(|x | x.contains(word))
收集::();
}

我想我可以返回一个克隆版本,但这是唯一/首选的方法吗?

不,不可能。要实现这一点,
collect
必须返回对其创建的内容的引用,然后

您正在寻找:

另见:

fn search(word: &str, data: &mut Vec<String>) {
    data.retain(|x| x.contains(word));
}
fn search<'a>(word: &str, data: &'a [String]) -> Vec<&'a String> {
    data.iter().filter(|x| x.contains(word)).collect()
}