可以从迭代器中收集&mut吗?

时间:2018-08-14 17:56:21

标签: vector iterator rust ownership

我正在尝试了解有关所有权的更多信息。这是一些无效的代码,因为collect不允许您获得&mut String

fn search(word: &str, data: &mut Vec<String>) {
    data = data
        .iter()
        .filter(|x| x.contains(word))
        .collect::<&mut Vec<String>>();
}

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

1 个答案:

答案 0 :(得分:7)

否,这是不可能的。为此,tf.shape必须返回对其创建的内容的引用,that's not possible

您正在寻找Vec::retain

collect

如果您不想突变传入的数据,则确实需要返回一个新的fn search(word: &str, data: &mut Vec<String>) { data.retain(|x| x.contains(word)); }

Vec

另请参阅: