gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:05:54 26 4
gpt4 key购买 nike

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

示例应用:

every([true, true, true].into_iter()) == true
every([true, false, true].into_iter()) == false

我很难让它与 Vec 一起工作,更不用说 Iterator 了。我已经尝试了以下和一些变体,但没有得到任何结果。

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
}

此代码出现错误:

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`

最佳答案

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

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 的东西,这使得这个解决方案非常通用。

关于rust - 如果迭代器中的每个值都为真,我如何定义一个返回真值的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53968385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com