Anuncios

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

Anuncios

Este método nos permite aplicar un closure a cada elemento de un objeto iterable. Veamos como es su síntaxis:

objeto_it.map(|variable| { ... instrucciones ... });
Anuncios

Se aplica directamente al objeto y se pasa el closure como argumento. Primero tenemos la variable para recibir el valor del objeto iterable. Este es opcional pero si lo queremos omitir se debe usar al guión bajo (_). Luego pasaremos las instrucciones para generar un resultado que lo usaremos para reemplazar el valor en el objeto. Tiene cierta similitud a filter pero en lugar de quitar u omitir el objeto, reemplaza al valor en ese momento. Para entender este método, vamos a trabajar en un ejemplo. Generen un nuevo proyecto y modifiquen a main.rs de la siguiente manera:

main.rs
Rust
fn main() {
let v = vec![1, 2, 3, 4];
let v_it: Vec<i32> = v.iter().map(|x| { x * 2 } ).collect();
for x in 0..v_it.len()
{
println!("{} -> {}", v[x], v_it[x]);
}
}
Anuncios
Anuncios

Primero definimos una colección de tipo Vector con algunos valores. Lo siguiente es crear al objeto que aplicaremos el método. Tal como sucedió con filter, este trabaja con objetos iterables pero no informa cual es el tipo que devuelve, debemos informar el tipo de dato que devuelve el método. Tomamos la colección anterior y la convertimos en iterable. A este le aplicamos el método, donde tomamos cada valor y lo asignamos a x. En el bloque del closure tomamos el valor de x y lo duplicamos, siendo este resultado el que usaremos para reemplazar al elemento actual. Y esto lo repetiremos en todos los valores. Por último, usamos a collect para tomar los cambios realizados y lo asignamos al objeto final.

Anuncios

Para finalmente, usar un bucle para mostrar las modificaciones realizadas anteriormente. Pero en lugar de mostrar los nuevos valores solamente, vamos a mostrar ambos. Usamos a len para obtener el total de v_it, ambos tienen la misma cantidad, y luego en el bloque mostramos primero el valor original almacenado en v. Para luego mostrar el nuevo valor al lado. Con todo esto comentado, compilemos y veamos como es la salida:

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

Como pueden observar, se logró el objetivo de duplicar el valor original. Recuerden que podemos realizar cualquier acción simplemente modificando al closure.

Anuncios
Nota:
Si quieren saber más sobre filter, tienen este post donde lo explico.
Anuncios

En resumén, hoy hemos visto a map, 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