簡體   English   中英

可以從迭代器中收集&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>>();
}

我想我可以返回一個克隆版本,但這是唯一/首選的方法嗎?

不,這是不可能的。 為了實現這一點, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM