@@ -2543,3 +2543,27 @@ impl Option<Option> { |
|
|
2543 |
2543 |
} |
2544 |
2544 |
} |
2545 |
2545 |
} |
|
2546 |
+ |
|
2547 |
+impl<T, const N: usize> [Option<T>; N] { |
|
2548 |
+/// Transposes a `[Option; N]` into a `Option<[T; N]>`. |
|
2549 |
+ /// |
|
2550 |
+ /// # Examples |
|
2551 |
+ /// |
|
2552 |
+ /// ``` |
|
2553 |
+ /// #![feature(option_array_transpose)] |
|
2554 |
+ /// # use std::option::Option; |
|
2555 |
+ /// |
|
2556 |
+ /// let data = [Some(0); 1000]; |
|
2557 |
+ /// let data: Option<[u8; 1000]> = data.transpose(); |
|
2558 |
+ /// assert_eq!(data, Some([0; 1000])); |
|
2559 |
+ /// |
|
2560 |
+ /// let data = [Some(0), None]; |
|
2561 |
+ /// let data: Option<[u8; 2]> = data.transpose(); |
|
2562 |
+ /// assert_eq!(data, None); |
|
2563 |
+ /// ``` |
|
2564 |
+ #[inline] |
|
2565 |
+#[unstable(feature = "option_array_transpose", issue = "130828")] |
|
2566 |
+pub fn transpose(self) -> Option<[T; N]> { |
|
2567 |
+self.try_map(core::convert::identity) |
|
2568 |
+} |
|
2569 |
+} |