基本上,我正在寻找Rust 中的partitionEithers等效项,即转换Vec<Result<A, B>>为Result<Vec<A>, Vec<B>>.
我知道我可以通过使用将 a 转换Vec<Result<A, B>>为,但是当我尝试时,我会收到一条错误消息,指出缺少此类实现。Result<Vec<A>, B>collect::<Result<Vec<A>, B>>collect::<Result<Vec<A>, Vec<B>>>
我也知道这可以使用突变来完成,但我想知道是否有任何我可以研究的不可变替代方案?
Sta*_*eur 11
您可以使用以下方法进行分区partition(),根据您的具体情况,使用partition_map()itertools 中的方法:
use itertools::{Either, Itertools};
fn main() {
let successes_and_failures = vec![Ok(1), Err(false), Err(true), Ok(2)];
let (successes, failures): (Vec<_>, Vec<_>) =
successes_and_failures
.into_iter()
.partition_map(|r| match r {
Ok(v) => Either::Left(v),
Err(v) => Either::Right(v),
});
assert_eq!(successes, [1, 2]);
assert_eq!(failures, [false, true]);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4024 次 |
| 最近记录: |