56
Colecciones en Scala Daniel Gomez David Valladarez Emily Arteaga

Colecciones en Scala

Embed Size (px)

Citation preview

Page 1: Colecciones en Scala

Colecciones en ScalaDaniel GomezDavid ValladarezEmily Arteaga

Page 2: Colecciones en Scala

❏ Introducción

❏ Jerarquía de colecciones.

❏ Traversable

❏ Iterable - Iterator

❏ Colecciones

❏ Tipo de colecciones

Contenido ❏ Secuencias

➢ Listas➢ Arrays➢ List Buffeer➢ Ejemplos de código➢ Queue➢ Stacks

❏ Set & Maps

➢ Operaciones Set➢ Operaciones Map

❏ Bibliografía

Page 3: Colecciones en Scala

Introducción

Las colecciones están presentes en la mayor parte de los programas que escribimos y todos los lenguajes incluyen un marco de trabajo de colecciones. Scala no es la excepción y la mayoría de las colecciones que ofrece son inmutables con muchas facilidades para operaciones de iteración. Estas dos características de las colecciones usadas correctamente nos conducen a escribir código conciso y de gran desempeño en las plataformas multicore actuales.

Page 4: Colecciones en Scala

Introducción - Tipos de colecciones

Las colecciones de Scala se distinguen sistemáticamente entre colecciones mutables o inmutables. En una colección mutable se puede agregar, cambiar o remover elementos de una colección . Las colecciones inmutables, al contrario, nunca cambian, puede haber operaciones que simulen ediciones, agregación , o eliminación, pero estas operaciones en cada caso retornan una nueva colección y dejarán sin cambiar la original.

Page 5: Colecciones en Scala

Introducción - Importar colecciones

Formas de importar una colección en Scala:

Import scala.collection

Import scala.collection.immutable

Import scala.collection.mutable

Page 6: Colecciones en Scala

Introducción - Importar colecciones

Cualquiera de las formas anteriores, si al llamar a una colección solo se coloca una palabra sin un prefijo como por ejemplo Set esta se referirá a una colección inmutable, por lo que para llamar a una colección mutable se necesita instanciarla de esta manera:

mutable.Set

El último paquete en la jerarquía de colecciones es collection.generic, este paquete contiene bloques de construcción para implementar colecciones.

Page 7: Colecciones en Scala

Introducción - Alias en Scala

Por conveniencia y retro compatibilidad algunos tipos importantes tienen alias en el paquete scala, por lo que se puede usar con sus simples nombres sin necesidad de importar, por ejemplo el tipo Lista puede accederse alternativamente

scala.collection.immutable.List scala.ListList

Otros tipos que tienen alias son Traversable, Iterable, Seq, IndexedSeq, Iterator, Stream, Vector, StringBuilder y Range

Page 8: Colecciones en Scala

Jerarquía de Colecciones

Page 9: Colecciones en Scala

Jerarquía de Colecciones

Lo que denotamos es que todas las colecciones derivan de la super trait Iterable de las colecciones mutables e inmutables (Seq), los set y los maps, la mayoría de las colecciones que se ofrecen son inmutables pero como derivan de Iterable, poseen facilidad de iteración, dependiendo del uso o aplicación obtendremos un rendimiento en las plataformas actuales de desarrollo.

Page 10: Colecciones en Scala

Traversable

Es el tope de la jerarquía de las colecciones de Scala.

Su única operación abstracta es foreach que permite aplicar una operación por cada elemento de la colección.

Page 11: Colecciones en Scala

Iterable - Iterator

Un iterador tiene muchos de los mismos métodos que iterable incluídas las de orden superior pero no pertenecen a la misma jerarquía, pero se diferencian en que Iterable puede manejar datos que se repitan más de una vez y así mismo se puede usar los métodos Iterable múltiples ocasiones mientras que Iterator solo una.

Page 12: Colecciones en Scala

Colecciones● Seq: Es un iterable donde el orden de los elementos está arreglado con posiciones de los índices empezando por 0. Indexed Seq Linear Seq

● Set: Son iterables que no contienen elementos duplicados. Sorted Set, Bit Set

● Map: Es un iterable en el que cada elemento es un par (clave, valor) SortedMap

Page 13: Colecciones en Scala

Tipos de Colecciones

Básicamente existen dos tipos de colecciones: mutables e inmutables, una colección mutables es factible ingresar, eliminar y modificar elementos de una colección mientras que las inmutables no se pueden cambiar los valores por asignación, existen método o funciones que simulan las operaciones anteriormente mencionadas pero éstas retornan una nueva colección dejando intacta la antigua.

Page 14: Colecciones en Scala

Secuencias - ListasEs el tipo más importante a saber dentro de las colecciones, es una estructura de datos inmutable, Como ventaja podemos indicar que las listas tienen una estructura recursiva, mientras que los arrays son planos. La inmutabilidad de las listas permiten desarrollar algoritmos correctos y eficientes porque se va a necesitar hacer copias de una lista.

Operaciones básicas:

● head: devuelve el primer elemento de la lista.

● tail: devuelve una lista que consta de todos los elementos menos el primero.

● isEmpty: devuelve True si la lista está vacía

Page 15: Colecciones en Scala

Creación de Listas

● Lista Simple

Page 16: Colecciones en Scala

Creación de Listas● Listas de Listas

Page 17: Colecciones en Scala

Secuencias - Arrays

Éstos permiten que se mantenga una secuencia de elementos y se pueda acceder a una posición arbitraria, tanto como para obtener un elemento con un índice de base cero, algo que denota es que éste tipo de colección es mutable. Los array en Scala están representados en la misma forma que los array en Java, de esa manera permite utilizar los mismo algoritmos desarrollados en Java y que devuelva un array, ésto quiere decir que posee los mismo métodos.

Page 18: Colecciones en Scala

Creación de Arreglos

Page 19: Colecciones en Scala

Creación de Arreglos

Page 20: Colecciones en Scala

Método Map

Page 21: Colecciones en Scala

Método Filter

Page 22: Colecciones en Scala

Concatenar dos Arreglos

Page 23: Colecciones en Scala

Agregar Elemento en el Arreglo

Page 24: Colecciones en Scala

Método Contains

Page 25: Colecciones en Scala

Métodos de Arreglos

Page 26: Colecciones en Scala

Secuencias - List Buffers

Un List Buffer es un objeto mutable que ayuda a construir listas de manera más eficiente cuando se necesitan anexarlas, así mismo proporcionan operaciones de agregación y anteponer operaciones, así mismo al terminar de construir se puede invocarla mediante toList en el ListBuffer.

Así una ventaja sería que al usar éste tipo de colección es evitar el potencial del desbordamiento del stack de memoria, porque se puede crear una la lista anteponiendo el orden deseado

Page 27: Colecciones en Scala

Creación de ListBuffer

Page 28: Colecciones en Scala

Métodos del ListBuffer

Page 29: Colecciones en Scala

Concatenar dos ListBuffer

Page 30: Colecciones en Scala

Secuencias - ArrayBuffers

Un ArrayBuffer es como un array con la excepción añadir y eliminar elementos de al inicio y al final de la secuencia, una desventaja sería que aunque posee todas las operaciones de los arrays, aunque son un poco más lento debido a una capa de envase (wrapping) en la ejecución.

Una ventaja es que cuando se crea el ArrayBuffer se debe especificar un parámetro de tipo, pero no especificar su longitud, ésta colección automáticamente ajustará el espacio asignado según sea necesario.

Page 31: Colecciones en Scala

Creación ArrayBuffers

Page 32: Colecciones en Scala

Métodos ArrayBuffer

Page 33: Colecciones en Scala

Secuenciales - QueuesEs el tipo de colección de datos FIFO y en Scala ofrecen variantes mutables e inmutables de cola. Se pueden agregar valores a una cola inmutable con enqueue, de igual manera se puede agregar múltiples valores en la misma línea, para removar se usa dequeue, pero al momento de usar éste método en una cola inmutable, éste devuelve el elemento a la cabeza de la cola y una tupla que el resto de elementos eliminados.

En la cola mutable se puede usar de forma similar, solo que en vez de usar enqueue, usamos += y ++= para agregar valores y para descolar dequeue solo remueve el elemento a la cabeza de ésta.

Page 34: Colecciones en Scala

Métodos Secuenciales: Queue

Page 35: Colecciones en Scala
Page 36: Colecciones en Scala

Secuenciales - Stack

De la misma forma que en las Colas, en las pilas existen versiones mutables e inmutables, posee los métodos principales push y pop.

El comando push permite ingresar valores a la cola, top devuelve el valor tope de la cola y pop eliminar ese valo

Page 37: Colecciones en Scala

Métodos Secuenciales: Stack

Page 38: Colecciones en Scala
Page 39: Colecciones en Scala

Set & Maps

Scala proporciona tanto mutables como inmutables versiones de Set y Maps y su jerarquía es la siguiente:

Page 40: Colecciones en Scala

Set & Maps

Por defecto se escribe “Set” o “Map” y se obtiene un objeto inmutable. Por otro lado, si se desea que sea mutable se tiene que hacer una importación explícita. Scala proporciona el acceso mediante el objeto Predef.

Page 41: Colecciones en Scala

Set

La característica clave de los conjuntos es que se garantiza como máximo un valor por cada objeto

Page 42: Colecciones en Scala

Set - Operaciones:

Page 43: Colecciones en Scala

MétodosSet

Page 44: Colecciones en Scala

Crear un Conjunto - Set

Page 45: Colecciones en Scala

Map

Para crear un Map, hay que tener en cuenta lo siguiente:

Se debe especificar dos cosas, el primer es la clave del map y el segundo son los valores, osea Map[String, int], , así mismo la lectura de un map es similar a la de una matriz.

Page 46: Colecciones en Scala

Map - Operaciones

Page 47: Colecciones en Scala

Métodos Map

Page 48: Colecciones en Scala

Creación de un Map(Diccionario)

Page 49: Colecciones en Scala

Contains

Page 50: Colecciones en Scala

Size

Page 51: Colecciones en Scala

Keys

Page 52: Colecciones en Scala

Values

Page 53: Colecciones en Scala

Resumen: Instanciar una colección en Scala

Para instanciar cada tipo de colección puede ser creada por la misma sintaxis, escribiendo el nombre de la colección seguido de sus elementos:

Traversable(1, 2, 3)Iterable("x", "y", "z")Map("x" -> 24, "y" -> 25, "z" -> 26)Set(Color.red, Color.green, Color.blue)SortedSet("hello", "world")Buffer(x, y, z)IndexedSeq(1.0, 2.0)LinearSeq(a, b, c)

Page 54: Colecciones en Scala

El mismo principio se aplica para implementaciones de colecciones específicas, como:

List(1, 2, 3)HashMap("x" -> 24, "y" -> 25, "z" -> 26)

Resumen: Instanciar una colección en Scala

Page 56: Colecciones en Scala

¡¡ Gracias !!