3 /// See [`multizip`](../fn.multizip.html) for more information.
10 /// Deprecated: renamed to multizip
11 #[deprecated(note = "Renamed to multizip")]
12 pub fn new
<U
>(t
: U
) -> Zip
<T
>
13 where Zip
<T
>: From
<U
>,
20 /// An iterator that generalizes *.zip()* and allows running multiple iterators in lockstep.
22 /// The iterator `Zip<(I, J, ..., M)>` is formed from a tuple of iterators (or values that
23 /// implement `IntoIterator`) and yields elements
24 /// until any of the subiterators yields `None`.
26 /// The iterator element type is a tuple like like `(A, B, ..., E)` where `A` to `E` are the
27 /// element types of the subiterator.
30 /// use itertools::multizip;
32 /// // Iterate over three sequences side-by-side
33 /// let mut xs = [0, 0, 0];
34 /// let ys = [69, 107, 101];
36 /// for (i, a, b) in multizip((0..100, &mut xs, &ys)) {
40 /// assert_eq!(xs, [69, 106, 103]);
42 pub fn multizip
<T
, U
>(t
: U
) -> Zip
<T
>
43 where Zip
<T
>: From
<U
>,
49 macro_rules
! impl_zip_iter
{
51 #[allow(non_snake_case)]
52 impl<$
($B
: IntoIterator
),*> From
<($
($B
,)*)> for Zip
<($
($B
::IntoIter
,)*)> {
53 fn from(t
: ($
($B
,)*)) -> Self {
55 Zip { t: ($($B.into_iter(),)*) }
59 #[allow(non_snake_case)]
60 #[allow(unused_assignments)]
61 impl<$
($B
),*> Iterator
for Zip
<($
($B
,)*)>
67 type Item
= ($
($B
::Item
,)*);
69 fn next(&mut self) -> Option
<Self::Item
>
71 let ($
(ref mut $B
,)*) = self.t
;
73 // NOTE: Just like iter::Zip, we check the iterators
74 // for None in order. We may finish unevenly (some
75 // iterators gave n + 1 elements, some only n).
77 let $B
= match $B
.next() {
85 fn size_hint(&self) -> (usize, Option
<usize>)
87 let sh
= (::std
::usize::MAX
, None
);
88 let ($
(ref $B
,)*) = self.t
;
90 let sh
= size_hint
::min($B
.size_hint(), sh
);
96 #[allow(non_snake_case)]
97 impl<$
($B
),*> ExactSizeIterator
for Zip
<($
($B
,)*)> where
99 $B
: ExactSizeIterator
,
106 impl_zip_iter
!(A
, B
);
107 impl_zip_iter
!(A
, B
, C
);
108 impl_zip_iter
!(A
, B
, C
, D
);
109 impl_zip_iter
!(A
, B
, C
, D
, E
);
110 impl_zip_iter
!(A
, B
, C
, D
, E
, F
);
111 impl_zip_iter
!(A
, B
, C
, D
, E
, F
, G
);
112 impl_zip_iter
!(A
, B
, C
, D
, E
, F
, G
, H
);