Anuncios

Bienvenidos sean a este post, hoy veremos un método de iter.

Anuncios

Este método nos permite filtrar información mediante el uso de un closure. Veamos como es su síintaxis:

objeto_it.filter(|variables| { ... instrucciones ... })
Anuncios

El método se aplica directamente al objeto iterable. Este en base al closure que pasamos como argumento se encargará de mantener los datos que coincidan con el resultado devuelto por este. En la síntaxis pase la estructura de como es el closure en el método. Este proceso no se maneja directamentte para asignarlo a otro objeto pero de eso hablaremos en el ejemplo. Recuerden que las variables del closure son opcionales pero para omitirlas, deben usar al guión bajo (_) para que el lenguaje tenga una alternativa de manejo. Para entender como trabaja vamos a analizar un ejemplo, generen un proyecto y modifiquen a main.rs de la siguiente manera:

main.rs
Rust
fn main() {
let n = vec![1, 2, 3, 4, 5, 6, 7, 8, 9];
let num_pares: Vec<i32> = n.iter()
.filter(|&x| { x % 2 == 0 } )
.copied()
.collect();
let mut pos = 0;
for num in num_pares
{
pos += 1;
println!("Numero par #{}: {}", pos, num);
}
}
Anuncios

Primero definimos una colección de tipo Vector con una serie de número de tipo int. Lo siguiente es crear a nuestro nuevo objeto filtrado. Primer detalle, debemos informar como es el tipo de dato que contendrá este nuevo objeto. Esto es obligatorio porque el lenguaje no tiene forma de determinar que tipo de dato debe almacenar. Convertimos a la colección anterior en un objeto iterable y le aplicamos el método. Tomamos el valor como una referrencia y le aplicamos una condición simple. Solo pasarán los valores donde el operador de modulo devuelve el valor de cero si lo dividimos por dos.

Anuncios
Anuncios

Al valor devuelto, le aplicamos el método copied. Este método toma el valor devuelto por filter y lo copia para mantenerlo en memoria y que podamos usarlo para otro objeto. Aquí es donde entra en acción collect, el cual se encarga de recoger estos datos copiados y los asigna al objeto que será el contenedor. En este caso, es num_pares y por esta razón debemos informar el tipo de dato que contendrá. La variable que definimos es solamente estético para indicar la cantidad de valores al mostrarlo. Como el objeto filtrado es una colección, y no un objeto iterable, lo podemos manipular directamente. Por eso, usamos un bucle que pasamos por todos los elementos, incrementamos la variable anterrior, y luego la usamos para el texto siguiente y el dato que obtenemos en cada pasada. Compilemos y veamos como es la salida:

$ cargo run
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.04s
Running `target/debug/iterar`
Numero par #1: 2
Numero par #2: 4
Numero par #3: 6
Numero par #4: 8
$
Anuncios

Como pueden observar logramos el objetivo. Y solamente modificando el closure podemos lograr disttintas conductas para filtrar valores.

Anuncios

En resumén, hoy hemos visto a filter, que es, para que sirve, como se utiliza, y un ejemplo práctico para ver como trabaja. Espero les haya sido de utilidad, sigueme en las redes sociales para recibir una notificación cada vez que subo un nuevo post:

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.50