Filter 如何筛选Vec中的值并仍然返回Vec?
我有一个函数,它接受一个Filter 如何筛选Vec中的值并仍然返回Vec?,filter,rust,Filter,Rust,我有一个函数,它接受一个&Vec(其中Word是本地定义的类型),并且应该返回一个Vec(或&Vec)。函数的定义包括从参数中筛选值: fn possibleWords(w1: &Word, words: &Vec<Word>) -> Vec<Word> { words.into_iter().filter(|w| matches(w, w1)).collect::<Vec<Word>>() } 您在&Vec上调用i
&Vec
(其中Word
是本地定义的类型),并且应该返回一个Vec
(或&Vec
)。函数的定义包括从参数中筛选值:
fn possibleWords(w1: &Word, words: &Vec<Word>) -> Vec<Word> {
words.into_iter().filter(|w| matches(w, w1)).collect::<Vec<Word>>()
}
您在
&Vec
上调用into_iter
方法,这将为您提供一个迭代器。当您尝试从此迭代器收集元素时,您将获得&Word
的集合,尽管您需要Word
的集合
您有两个选项可以修复此问题:
通过克隆每个元素将迭代器
转换为迭代器
(在迭代器上调用克隆的
方法)李>
将Vec
传递给函数,而不是&Vec
。这样,into_iter
方法将返回一个迭代器
,您可以毫无问题地从中进行收集
我认为问题在于您试图从&Word
的迭代器构建Vec
。尝试在collect
方法之前插入.cloned()
。为了将调用到iter
方法中,必须将向量本身传递给函数,而不是对它的引用。嗯,@Milack27,它似乎可以工作,谢谢!我必须挖掘它来了解那里实际发生了什么,但我知道现在该去哪里看。相关:.可能的声音
应该是&[Word]
而不是&Vec
。看见
type Word = [char; 10];
fn matches(w1: &Word, w2: &Word) -> bool {
true
}
fn possibleWords(w1: &Word, words: &Vec<Word>) -> Vec<Word> {
words.into_iter().filter(|w| matches(w, w1)).collect::<Vec<Word>>()
}
fn main() {
let w1 = ['D', 'E', 'C', 'O', 'U', 'V', 'E', 'R', 'T', 'E'];
let w2 = ['D', 'E', 'C', 'O', 'U', 'V', 'E', 'R', 'E', 'Z'];
let words = vec![w1, w2];
println!("{:?}", possibleWords(&w1, &words));
}