gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:56:50 25 4
gpt4 key购买 nike

我想了解更多关于所有权的信息。这是一些不起作用的代码,因为 collect 不允许您获得 &mut String:

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

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

最佳答案

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

您正在寻找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()
}

另见:

关于vector - 可以从迭代器中收集 &mut 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51847257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com