Thursday, October 13, 2016

List methods : apply, indices, flatten, zip, unzip

scala> // apply() can be used to select an element in List

scala> // Beware : Takes time proportion to the index #351

scala> val data = List("a", "b", "c", "d", "e", "f")
data: List[String] = List(a, b, c, d, e, f)

scala> val res = data.apply(2)
res: String = c

scala> val res = data(2)
res: String = c

scala>

scala> // indices : Returns indices of a list

scala> val data = List("a", "b", "c", "d", "e", "f")
data: List[String] = List(a, b, c, d, e, f)

scala> val res = data.indices
res: scala.collection.immutable.Range = Range(0, 1, 2, 3, 4, 5)

scala>

scala> // flatten : Flatten multiple lists into a single list

scala> val data = List(List(1, 2, 3), List(4, 5), List(6, 7))
data: List[List[Int]] = List(List(1, 2, 3), List(4, 5), List(6, 7))

scala> val res = data.flatten
res: List[Int] = List(1, 2, 3, 4, 5, 6, 7)

scala>

scala> // zip, zipWithIndex #352

scala> val d1 = List("a", "b", "c", "d", "e", "f")
d1: List[String] = List(a, b, c, d, e, f)

scala> val d2 = List(1,    2,  3)
d2: List[Int] = List(1, 2, 3)

scala> val res = d1.zip(d2)
res: List[(String, Int)] = List((a,1), (b,2), (c,3))

scala> val res = d1.indices.zip(d1)
res: scala.collection.immutable.IndexedSeq[(Int, String)] = Vector((0,a), (1,b), (2,c), (3,d), (4,e), (5,f))

scala> val res = d1.zipWithIndex
res: List[(String, Int)] = List((a,0), (b,1), (c,2), (d,3), (e,4), (f,5))

scala>

scala> // unzip

scala> val d1 = List("a", "b", "c", "d", "e", "f")
d1: List[String] = List(a, b, c, d, e, f)

scala> val zipped = d1.zipWithIndex
zipped: List[(String, Int)] = List((a,0), (b,1), (c,2), (d,3), (e,4), (f,5))

scala> val unzipped = zipped.unzip
unzipped: (List[String], List[Int]) = (List(a, b, c, d, e, f),List(0, 1, 2, 3, 4, 5))