Ejercicio: Implementación de un iterador
En este ejercicio, implementará un iterador que devuelve los elementos iguales en una secuencia agrupada en vectores, como:
- Entrada:
[ 1, 1, 2, 1, 3, 3 ]
- Salida:
[ [1, 1], [2], [1], [3, 3] ]
El objetivo es terminar de escribir la implementación del rasgo Iterator
de la estructura Group
, que será responsable de mantener el estado de los datos entre iteraciones en su campo inner
.
El tipo genérico T
habrá de ser un implementador del rasgo PartialEq
, ya que se tendrán que comparar los valores para realizar esta asignación. Pero no se preocupe, porque esa parte ya se ha resuelto en el segmento impl<T: PartialEq>
.
struct Groups<T> {
inner: Vec<T>,
}
impl<T> Groups<T> {
fn new(inner: Vec<T>) -> Self {
Groups { inner }
}
}
impl<T: PartialEq> Iterator for Groups<T> {
type Item = Vec<T>;
// TODO: Write the rest of this implementation.
}
fn main() {
let data = vec![4, 1, 1, 2, 1, 3, 3, -2, -2, -2, 5, 5];
// groups: |->|---->|->|->|--->|----------->|--->|
assert_eq!(
Groups::new(data).into_iter().collect::<Vec<Vec<_>>>(),
vec![
vec![4],
vec![1, 1],
vec![2],
vec![1],
vec![3, 3],
vec![-2, -2, -2],
vec![5, 5],
]
);
let data2 = vec![1, 2, 2, 1, 1, 2, 2, 3, 4, 4, 3];
// groups: |->|---->|---->|----|->|----->|->|
assert_eq!(
Groups::new(data2).into_iter().collect::<Vec<Vec<_>>>(),
vec![
vec![1],
vec![2, 2],
vec![1, 1],
vec![2, 2],
vec![3],
vec![4, 4],
vec![3],
]
)
}
También puede ver este ejercicio en este vínculo al área de juegos de Rust.
Para encontrar una solución para este ejercicio, consulte este vínculo al área de juegos de Rust.