Filtrar un vector de estructuras personalizadas en Rust
 
Este artículo trata sobre cómo filtrar un vector de estructuras personalizadas en Rust.
Filtro de óxido
Una biblioteca para crear predicados y filtros para usar con la función Iterator::filter. Hay tipos y características en esta biblioteca que se pueden usar para crear filtros y luego combinarlos con operadores lógicos como Y, O, NO y otros.
Al implementar el rasgo Filtro, se pueden crear filtros personalizados. Aunque está pensada para usarse en la función Iterator::filter(), la biblioteca se puede usar en otros lugares, incluidas otras funciones.
Ejemplo para el filtrado de óxido de un vector:
let numbers: Vec<i32> = vec![
  10, 20, 30, 40, 50, 60, 70, 80,
];
let even_number = numbers
  .into_iter()
  .filter(|n| n % 2 == 0)
  .collect::<Vec<_>>();
println!("{:?}", even_number);
Producción :
10, 20, 30, 40, 50, 60, 70, 80
Arreglar Vector de Estructuras personalizadas filtrando en Rust
- La iteración sobre las referencias debe cambiarse por la iteración sobre los valores reales. La opción predeterminada requiere el hecho de que somos los propietarios del vector.
Utilice `into_iter` en lugar de `iter` para crear un bucle.
```rust
let the_words: Vec<Words> = words_context
   .vocabularies
   .into_iter()
   .filter(|voc| voc.metadata.identifier == words_id)
   .collect();
```
De lo contrario, podemos "drenar" el iterador si está presente una referencia mutable.
```rust
let the_words: Vec<Words> = words_context
   .vocabularies
   .drain(..)
   .filter(|voc| voc.metadata.identifier == words_id)
   .collect();
```
- 
Clonar los objetos te permitirá duplicarlos. Esto requiere que el tipo en el que está iterando implemente el método Clonar.Se recomienda llamar a cloned()inmediatamente después de filtrar y antes de llamar acollect()para evitar clonar algo que se ha descartado previamente.let the_words: Vec<Words> = words_context .vocabularies .iter() .filter(|voc| voc.metadata.identifier == words_id) .cloned() .collect();
- 
Es mejor recoger un Vecde referencias que de valores. Por lo tanto, se requiere lo siguiente: independientemente de cómo use los artículos después de eso, debe tomar un artículo por referencia en lugar de por valor.let the_words: Vec<&Words> = words_context .vocabularies .iter() .filter(|voc| voc.metadata.identifier == words_id) .collect();Solo es necesario especificar el tipo de variable, o la palabra recoger, no ambas a la vez.let the_ word: Vec_podría usarse al comienzo de los tres ejemplos para permitir que el compilador infiera el tipo de datos contenidos dentro de la colección en función del iterador.