rust - lenguaje - ¿Es posible dividir un vector en grupos de 10 con iteradores?
rust traduccion (1)
No hay tal método de ayuda en el rasgo del Iterator
directamente. Sin embargo, hay dos formas principales de hacerlo:
Utilice el método
[T]::chunks()
(que puedeVec<T>
directamente en unVec<T>
). Sin embargo, tiene una pequeña diferencia: no produciráNone
, pero la última iteración produce un slice más pequeño.Ejemplo :
let my_vec = (0..25).collect::<Vec<_>>(); for chunk in my_vec.chunks(10) { println!("{:02?}", chunk); }
Resultado:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [10, 11, 12, 13, 14, 15, 16, 17, 18, 19] [20, 21, 22, 23, 24]
Use el
Itertools::chunks()
de lasitertools
caja . Esta caja amplía el rasgo delIterator
de la biblioteca estándar. ¡Así que este métodochunks()
funciona con todos los iteradores! Tenga en cuenta que el uso es un poco más complicado para ser tan general. Esto tiene el mismo comportamiento que el método descrito anteriormente: en la última iteración, el fragmento será más pequeño en lugar de contenerNone
.Ejemplo :
extern crate itertools; use itertools::Itertools; for chunk in &(0..25).chunks(10) { println!("{:02?}", chunk.collect::<Vec<_>>()); }
Resultado:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [10, 11, 12, 13, 14, 15, 16, 17, 18, 19] [20, 21, 22, 23, 24]
Tenga en cuenta también que:
- En su código,
vec![0..25]
no está haciendo lo que espera que haga. Creará un vector con un elemento. Ese elemento es unRange
. Lo arreglé en los ejemplos de arriba. - En Rust, las variables tienen nombres de
snake_case
.
He let myVec = vec![0..25]
y me gustaría dividir myVec
en iteradores de grupos de 10:
[0,1,2,3,4,5,6,7,8,9]
[10,11,12,13,14,15,16,17,18,19]
[20,21,22,23,24,25,None,None,None,None]
¿Es posible hacer eso con iteradores en Rust?