Skip to content

Commit 2d52ca2

Browse files
bors[bot]mingyli
andauthored
Merge #511
511: Implement partition_result r=jswrenn a=mingyli Addresses #510 `partition_result` behaves as [OCaml Base's `partition_result`](https://ocaml.janestreet.com/ocaml-core/latest/doc/base/Base/List/index.html#val-partition_result) does: ```rust use itertools::Itertools; let successes_and_failures = vec![Ok(1), Err(false), Err(true), Ok(2)]; let (successes, failures): (Vec<_>, Vec<_>) = successes_and_failures .into_iter() .partition_result(); assert_eq!(successes, [1, 2]); assert_eq!(failures, [false, true]); ``` Co-authored-by: Ming <[email protected]>
2 parents f6226e7 + 5c86c2c commit 2d52ca2

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

src/lib.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2529,6 +2529,33 @@ pub trait Itertools : Iterator {
25292529
(left, right)
25302530
}
25312531

2532+
/// Partition a sequence of `Result`s into one list of all the `Ok` elements
2533+
/// and another list of all the `Err` elements.
2534+
///
2535+
/// ```
2536+
/// use itertools::Itertools;
2537+
///
2538+
/// let successes_and_failures = vec![Ok(1), Err(false), Err(true), Ok(2)];
2539+
///
2540+
/// let (successes, failures): (Vec<_>, Vec<_>) = successes_and_failures
2541+
/// .into_iter()
2542+
/// .partition_result();
2543+
///
2544+
/// assert_eq!(successes, [1, 2]);
2545+
/// assert_eq!(failures, [false, true]);
2546+
/// ```
2547+
fn partition_result<A, B, T, E>(self) -> (A, B)
2548+
where
2549+
Self: Iterator<Item = Result<T, E>> + Sized,
2550+
A: Default + Extend<T>,
2551+
B: Default + Extend<E>,
2552+
{
2553+
self.partition_map(|r| match r {
2554+
Ok(v) => Either::Left(v),
2555+
Err(v) => Either::Right(v),
2556+
})
2557+
}
2558+
25322559
/// Return a `HashMap` of keys mapped to `Vec`s of values. Keys and values
25332560
/// are taken from `(Key, Value)` tuple pairs yielded by the input iterator.
25342561
///

0 commit comments

Comments
 (0)