Date post: | 13-Apr-2017 |
Category: |
Engineering |
Upload: | daniel-gomez-jaramillo |
View: | 51 times |
Download: | 2 times |
Colecciones en ScalaDaniel GomezDavid ValladarezEmily Arteaga
❏ 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
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.
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.
Introducción - Importar colecciones
Formas de importar una colección en Scala:
Import scala.collection
Import scala.collection.immutable
Import scala.collection.mutable
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.
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
Jerarquía de Colecciones
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.
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.
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.
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
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.
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
Creación de Listas
● Lista Simple
Creación de Listas● Listas de Listas
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.
Creación de Arreglos
Creación de Arreglos
Método Map
Método Filter
Concatenar dos Arreglos
Agregar Elemento en el Arreglo
Método Contains
Métodos de Arreglos
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
Creación de ListBuffer
Métodos del ListBuffer
Concatenar dos ListBuffer
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.
Creación ArrayBuffers
Métodos ArrayBuffer
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.
Métodos Secuenciales: Queue
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
Métodos Secuenciales: Stack
Set & Maps
Scala proporciona tanto mutables como inmutables versiones de Set y Maps y su jerarquía es la siguiente:
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.
Set
La característica clave de los conjuntos es que se garantiza como máximo un valor por cada objeto
Set - Operaciones:
MétodosSet
Crear un Conjunto - Set
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.
Map - Operaciones
Métodos Map
Creación de un Map(Diccionario)
Contains
Size
Keys
Values
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)
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
Libro:Programming in ScalaMartin Odersky
Referencias de internet:http://www.scala-lang.org/api/2.12.0/scala/collection/mutable/Queue.htmlhttps://www.tutorialspoint.com/scala/scala_sets.htmhttp://docs.scala-lang.org/overviews/collections/arrays.html
http://docs.scala-lang.org/overviews/collections/maps.html
Referencias bibliográficas
¡¡ Gracias !!