355 // Map type (upper-case)  | 
   355 // Map type (upper-case)  | 
   356 //=======================  | 
   356 //=======================  | 
   357   | 
   357   | 
   358 // Note the difference between map and Map  | 
   358 // Note the difference between map and Map  | 
   359   | 
   359   | 
   360 val ascii = ('a' to 'z').map(c => (c, c.toInt)).toList | 
   360 val m = Map(1 -> "one", 2 -> "two", 10 -> "many")  | 
   361   | 
   361   | 
   362 val ascii_Map = ascii.toMap  | 
   362 List((1, "one"), (2, "two"), (10, "many")).toMap  | 
   363   | 
   363   | 
   364   | 
   364 m.get(1)  | 
   365 def factors(n: Int) : List[Int] =  | 
   365 m.get(4)  | 
   366   (2 until n).toList.filter(n % _ == 0)  | 
   366   | 
   367   | 
   367 m.getOrElse(1, "")  | 
   368 var ls = (1 to 10).toList  | 
   368 m.getOrElse(4, "")  | 
   369 val facs = ls.map(n => (n, factors(n)))  | 
   369   | 
   370   | 
   370 val new_m = m + (10 -> "ten")  | 
   371 facs.find(_._1 == 4)  | 
   371   | 
   372   | 
   372 new_m.get(10)  | 
   373 // works for lists of pairs  | 
   373   | 
   374 facs.toMap  | 
   374 val m2 = for ((k, v) <- m) yield (k, v.toUpperCase)  | 
   375   | 
   375   | 
   376   | 
   376   | 
   377 facs.toMap.get(40)  | 
         | 
   378 facs.toMap.getOrElse(42, Nil)  | 
         | 
   379   | 
         | 
   380 val facsMap = facs.toMap  | 
         | 
   381   | 
         | 
   382 val facsMap0 = facsMap + (0 -> List(1,2,3,4,5))  | 
         | 
   383 facsMap0.get(0)  | 
         | 
   384   | 
         | 
   385 val facsMap2 = facsMap + (1 -> List(1,2,3,4,5))  | 
         | 
   386 facsMap.get(1)  | 
         | 
   387 facsMap2.get(1)  | 
         | 
   388   | 
   377   | 
   389 // groupBy function on Maps  | 
   378 // groupBy function on Maps  | 
   390   | 
   379 val lst = List("one", "two", "three", "four", "five") | 
   391 val ls = List("one", "two", "three", "four", "five") | 
   380 lst.groupBy(_.head)  | 
   392 ls.groupBy(_.length)  | 
   381   | 
   393   | 
   382 lst.groupBy(_.length)  | 
   394 ls.groupBy(_.length).get(5)  | 
   383   | 
         | 
   384 lst.groupBy(_.length).get(3)  | 
         | 
   385   | 
         | 
   386 val grps = lst.groupBy(_.length)  | 
         | 
   387 grps.keySet  | 
   395   | 
   388   | 
   396   | 
   389   | 
   397   | 
   390   | 
   398   | 
   391   | 
   399 // Pattern Matching  | 
   392 // Pattern Matching  | 
   592   | 
   585   | 
   593 // Jumping Towers  | 
   586 // Jumping Towers  | 
   594 //================  | 
   587 //================  | 
   595   | 
   588   | 
   596   | 
   589   | 
   597 def moves(xs: List[Int], n: Int) : List[List[Int]] = (xs, n) match { | 
   590 def moves(xs: List[Int], n: Int) : List[List[Int]] =   | 
   598   case (Nil, _) => Nil  | 
   591  (xs, n) match { | 
   599   case (xs, 0) => Nil  | 
   592    case (Nil, _) => Nil  | 
   600   case (x::xs, n) => (x::xs) :: moves(xs, n - 1)  | 
   593    case (xs, 0) => Nil  | 
   601 }  | 
   594    case (x::xs, n) => (x::xs) :: moves(xs, n - 1)  | 
         | 
   595  }  | 
   602   | 
   596   | 
   603   | 
   597   | 
   604 moves(List(5,1,0), 1)  | 
   598 moves(List(5,1,0), 1)  | 
   605 moves(List(5,1,0), 2)  | 
   599 moves(List(5,1,0), 2)  | 
   606 moves(List(5,1,0), 5)  | 
   600 moves(List(5,1,0), 5)  |