首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果迭代器中的每个值都为true,我如何定义一个返回true的函数?

如果迭代器中的每个值都为true,我如何定义一个返回true的函数?
EN

Stack Overflow用户
提问于 2018-12-29 17:40:30
回答 1查看 229关注 0票数 2

我想定义一个函数every,它接受一个迭代器,虽然它不是None,但它确保所有的值都是true

示例应用程序:

代码语言:javascript
复制
every([true, true, true].into_iter()) == true
代码语言:javascript
复制
every([true, false, true].into_iter()) == false

我很难让它在Vec上工作,更不用说Iterator了。我已经尝试了以下方法和一些变体,但没有取得任何进展。

代码语言:javascript
复制
use std::ops;

fn every<T>(v: Vec<T>) -> bool
where
    T: ops::Not,
{
    for item in v {
        match !item {
            T::No => return false,
        }
    }
    true
}

下面的代码得到以下错误:

代码语言:javascript
复制
error[E0599]: no associated item named `No` found for type `T` in the current scope
 --> src/lib.rs:9:13
  |
9 |             T::No => return false,
  |             ^^^^^ associated item not found in `T`
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-29 18:26:42

基于Stargateur's comment的更通用的示例

代码语言:javascript
复制
fn every<T, I>(v: I) -> bool
where
    I: IntoIterator<Item = T>,
    T: std::ops::Not<Output = bool>,
{
    v.into_iter().all(|x| !!x)
}

(playground)

v可以是实现IntoIterator的任何东西,例如Vec,也可以是像mapfilter这样的东西,这使得这个解决方案非常通用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53968385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档