rust 什么是过滤&[&str]的正确方法?

tquggr8v  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(181)

我尝试用下面的方法过滤&[&str]类型的数组,以排除““的情况:

let example_array : &[&str] = &["hello", " ", "world"]; 
let filtered_array : &[&str] = example_array.iter().copied().filter(|&word| word != " ").collect();

我得到的错误是:

&[&str]类型的值不能从std::iter::Iterator<Item=&str>构建

有人能解释一下为什么不工作,在哪里寻找解决方案?

jvlzgdj9

jvlzgdj91#

&[&str]是对字符串引用的切片(数组)的引用。这适用于字符串的静态数组,因为编译器能够将其放入静态数据部分并创建对它的引用。collect函数不能返回&[&str],但可以返回动态分配的Vec<&str>

let example_array: &[&str] = &["hello", " ", "world"];
let filtered_array: Vec<&str> = example_array.iter().copied().filter(|&word| word != " ").collect();

编辑:

Vec<&str>实现了Deref<Target = [&str]>,这意味着您可以通过引用Vec<&str>将其用作&[&str]

let filtered_array_ref: &[&str] = &filtered_array;

相关问题