Ruby: select, reject, collect y detect

Vamos a ver como se usan select, reject, collect, inject y detect en Ruby
Primero nos crearemos un pequeño array:

a = [1,2,3,4]

Ahora veremos como funciona cada uno de ellos:

Select básicamente itera a traves de todos los elementos de tu array y ejecuta tu lógica en cada uno de ellos. Si la lógica devuelve TRUE, entonces agrega el elemento a un nuevo array que es devuelto cuando la operación haya terminado. Aquí hay un ejemplo:

a.select {|n| n> 2}

Esto devolverá los dos últimos elementos en el array: 3 y 4. ¿Porqué? Porque 3 y 4 son ambos mayores que 2, de acuerdo a la lógica que pusimos en el bloque. Vereis que select tiene una hermana malvada llamada reject. Esta ejecutará la operación opuesta a select. La lógica que devuelve FALSE agrega un item al array que es devuelto. Aquí hay un ejemplo como el anterior, excepto que intercambiaremos select por reject:

a.reject {|n| n>2}

En este ejemplo el valor devuelto es [1,2] debido a que estos elementos devolvieron falso cuando la condición fue testeada.

Ahora veremos otro hermano cercano de select y reject, collect, el cual devuelve un array de valores que son el RESULTADO de la lógica en el bloque. Previamente hemos devuelto los items basados en el resultado de la CONDICION en el bloque. Quizas necesitemos obtener el cuadrado de los valores de nuestro array.

a.collect {|n| n*n}

Esto devuelve un nuevo array con cada item nuestro array al cuadrado

Ya por último os hablaré de detect:

a.detect {|n| n==3}

Devolverá dicho número si se encuentra en el array y nil en caso contrario

Ya sabiendo todo esto llegamos a la conclusión de que:

1. Usaremos select o reject si necesitas seleccionar o rechazar items basados en una condición.

2. Usaremos collect si necesitas construir un array de resultados a partir de la lógica en el bloque.

3. Usaremos detect si necesitas encontrar un item en un array.


Fuente: RodoLinux

2 comentarios:

Anónimo dijo...

Encontre tu entrada buscando implementaciones javascript de los metodos select, reject, sobre colecciones. Trate de leer lo que escribiste pero casi ni se puede distinguir el texto de color de fondo.

PsYducKbug dijo...

Tienes toda la razón, es que estoy de pruebas, creo que con el nuevo color lo podrás leer mejor ;)