#Kata Lists en Scala.

En este post te voy a explicar como funcionan las Lists en Scala.

Primeros pasos.

Las Lists en Scala son una colección genérica de elementos inmutables. A diferencia de otros lenguajes, no puedes usar las Lists para agregar o remover elementos aleatorios. Esta colección está optimizada para ser iterada, no para su acceso por índice.

Al ser una colección inmutable, cuando aplicas una operación que transforma sus elementos, se produce una nueva instancia.

//Original List
var originalList = List(1,2,3,4,5)
//All the operations that transform the collection
// will produce a new List.
var listWithDrop = originalList.drop(1)
var listWithFilter = originalList.filter(_ > 3)
var listWithPrepend = originalList.prepended(0)
println(originalList) // 1, 2, 3, 4, 5
println(listWithDrop) // 2, 3, 4, 5
println(listWithFilter) // 4, 5
println(listWithPrepend) // 0, 1, 2, 3, 4, 5
view raw list1.sc hosted with ❤ by GitHub

Operaciones de inserción y actualización.

Puedes aplicar dos operaciones para insertar elementos en las listas: append y prepend. Estas operaciones te permiten agregar elementos al principio o al final de la colección, esto creará una nueva referencia.

No puedes actualizar elementos de una lista sin tener que producir una nueva instancia con un método de transformación. Si requieres actualizar los elementos de la colección sin tener que producir una nueva referencia, un Array es una mejor elección. En cambio, si quieres hacer prepend o append a una colección inmutable sin tener problemas de desempeño, te recomiendo usar Vector.

var originalArray = Array(1,2,3,4)
//This operation won't create a new collection
originalArray.update(0,-1)
println(originalArray.foreach(println))
// You can't update a list, only create a new list with the
// transformed elements.
var originalList = List(1,2,3,4)
var newList = originalList.updated(0, -1)
//Two new references
println(originalList) // 1, 2, 3, 4
println(newList) // -1, 2, 3, 4
var prependList = originalList.prepended(-2)
var appendList = originalList.appended(5)
//Two new references
println(prependList)
println(appendList)
view raw list2.sc hosted with ❤ by GitHub

Operadores de List.

Scala provee muchos operadores para simplificar el trabajo con las colecciones. A continuación te muestro algunos:

var list = List(1,2,3,4,5)
//Prepend operator
var prependOperator = 0 +: list
var prependList = list.prepended(0)
println(prependOperator) // 0, 1, 2, 3, 4, 5
println(prependList) // 0, 1, 2, 3, 4, 5
var anotherPrependedOperator = List(-2,-1) ++: list
var anotherPrependedList = list.prependedAll(List(-2,-1))
println(anotherPrependedOperator) //-2, -1, 1, 2, 3, 4, 5
println(anotherPrependedList) //-2, -1, 1, 2, 3, 4, 5
//Append operator
var appendOperator = list :+ 6
var appendList = list.appended(6)
println(appendOperator) // 1, 2, 3, 4, 5, 6
println(appendList) // 1, 2, 3, 4, 5, 6
var anotherAppendedOperator = list :++ List(6, 7)
var anotherAppendedList = list.appendedAll(List(6,7))
println(anotherAppendedOperator) // 1, 2, 3, 4, 5, 6, 7
println(anotherAppendedList) // 1, 2, 3, 4, 5, 6, 7
view raw list3.sc hosted with ❤ by GitHub

Referencias:

 

 

 

Gustavo Sánchez

Soy especialista en escribir software de calidad. Mediante el uso de marcos de trabajo, técnicas y automatización de procesos he podido reducir los costes operativos de los sistemas de la empresa. Sistemas confiables y adaptables producen clientes felices.

Site Footer