/
germanubis
/
itertools
Обзор
Документация
Войти
/
germanubis
/
itertools
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/zip_eq_impl.rs
65 строк
2 KB
Philippe-Cholet
Fix/ignore warnings within doctests
03 июл 2024, 11:54
03 июл 2024, 11:54
3067893
Код
Авторство
О чём код?
use super::size_hint; /// An iterator which iterates two other iterators simultaneously /// and panic if they have different lengths. /// /// See [`.zip_eq()`](crate::Itertools::zip_eq) for more information. #[derive(Clone, Debug)] #[must_use = "iterator adaptors are lazy and do nothing unless consumed"] pub struct ZipEq<I, J> { a: I, b: J, } /// Zips two iterators but **panics** if they are not of the same length. /// /// [`IntoIterator`] enabled version of [`Itertools::zip_eq`](crate::Itertools::zip_eq). /// /// ``` /// use itertools::zip_eq; /// /// let data = [1, 2, 3, 4, 5]; /// for (a, b) in zip_eq(&data[..data.len() - 1], &data[1..]) { /// /* loop body */ /// # let _ = (a, b); /// } /// ``` pub fn zip_eq<I, J>(i: I, j: J) -> ZipEq<I::IntoIter, J::IntoIter> where I: IntoIterator, J: IntoIterator, { ZipEq { a: i.into_iter(), b: j.into_iter(), } } impl<I, J> Iterator for ZipEq<I, J> where I: Iterator, J: Iterator, { type Item = (I::Item, J::Item); fn next(&mut self) -> Option<Self::Item> { match (self.a.next(), self.b.next()) { (None, None) => None, (Some(a), Some(b)) => Some((a, b)), (None, Some(_)) | (Some(_), None) => { panic!("itertools: .zip_eq() reached end of one iterator before the other") } } } fn size_hint(&self) -> (usize, Option<usize>) { size_hint::min(self.a.size_hint(), self.b.size_hint()) } } impl<I, J> ExactSizeIterator for ZipEq<I, J> where I: ExactSizeIterator, J: ExactSizeIterator, { }