过滤一个指向Vec<&str>的迭代器,如何将其收集回Vec<&str>中

3

我正在进行我的第一个Rust项目,并在学习中前进。我正在尝试过滤一个&str向量,但是当我尝试收集迭代器时,会出现以下错误:

a value of type `std::vec::Vec<&str>` cannot be built from an iterator over elements of type `&&str`
`filter`的文档提到了当你得到一个双重引用时的情况。遵循文档中的建议,我尝试在闭包参数中对引用进行解构,并尝试在闭包体中添加单重或双重取值。
let test = vec!("a", "b", "", "c");
let filt_a: Vec<&str> = tst.iter().filter(|&&x| x.is_empty()).collect();
let filt_b: Vec<&str> = tst.iter().filter(|&x| *x.is_empty()).collect();
let filt_c: Vec<&str> = tst.iter().filter(|x| **x.is_empty()).collect();

任何减少的解引用(或结构化引用)都会导致完全相同的错误。
添加任何额外的解引用只会在尝试解引用普通的&str时产生错误。
任何帮助我找到正确方向的建议都将是极好的。

4
在过滤器之后需要使用.copied(),或者使用into_iter()代替iter()。后者会导致原始向量被使用后无法再次访问。 - Sven Marnach
完美,谢谢!我刚刚试了一下,当我使用 into_iter() 时,我无法使用2个解引用。.copied 能够与任何解引用组合配合使用。 - Sam F.H.
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接