Rust-将过滤器谓词创建为函数



我想创建一个返回谓词的函数。

我有一个向量,我想根据字符过滤一个特定的字符。我的代码:

let n = 0; // Irrelevant. This will change
co2 = co2
.into_iter()
.filter(|&binary| binary.chars().collect::<Vec<char>>().get(n).unwrap() == &'1')
.collect();

我有几个角色想要匹配。我的意图是创建这样一个函数:

fn create_predicate(character: char, n: usize) -> impl FnMut(&str) {
move |x: &str| {
return x.chars().collect::<Vec<char>>().get(n).unwrap() == &character;
}
}
co2 = co2.filter(create_predicate('q', n));

这不起作用,但我想让它看起来像

所以我想要一个函数来创建一个谓词,我可以在过滤器中使用它。我该怎么做?

如果没有一个完整的最小可复制示例,很难给出完整的答案,但您可以对代码进行两个更改:

  • 如果要在filter中使用谓词,则谓词必须返回bool
  • 谓词可能必须采用&&str

工作示例:

fn create_predicate(character: char, n: usize) -> impl FnMut(&&str) -> bool {
move |x: &&str| {
return x.chars().collect::<Vec<char>>().get(n).unwrap() == &character;
}
}
fn main() {
let co2 = [ "azerty", "foo", "bar" ];
let co2 = co2.iter().copied().filter(create_predicate('q', 1));
}

游乐场

最新更新