Scala學習筆記(4)—— scala 練習
阿新 • • 發佈:2018-12-14
1 練習
1.1 建立一個List
scala> val lst0 = List(1,7,9,8,0,3,5,4,6,2)
lst0: List[Int] = List(1, 7, 9, 8, 0, 3, 5, 4, 6, 2)
1.2 將lst0中每個元素乘以10後生成一個新的集合
scala> val lst1 = lst0.map(_ * 10)
lst1: List[Int] = List(10, 70, 90, 80, 0, 30, 50, 40, 60, 20)
1.3 將lst0中的偶數取出來生成一個新的集合
scala> val lst2 = lst0.filter(_%2==0)
lst2: List[ Int] = List(8, 0, 4, 6, 2)
scala> val lst2 = lst0.filter(x => x%2==0)
lst2: List[Int] = List(8, 0, 4, 6, 2)
1.4 將lst0排序後生成一個新的集合
scala> lst0.sorted
res0: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
1.5 反轉順序
scala> lst0.sorted.reverse
res1: List[Int] = List(9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
1.6 將lst0中的元素4個一組,型別為Iterator[List[Int]]
scala> lst0.grouped(4)
res4: Iterator[List[Int]] = non-empty iterator
scala> res4.map(_.size)
res5: Iterator[Int] = non-empty iterator
scala> res5.toList
res7: List[Int] = List(4, 4, 2)
1.7 將Iterator轉換成List
scala> res12.toList
res13: List[List[Int]] = List(List(1, 7, 9, 8), List(0, 3, 5, 4), List(6, 2))
1.8 將多個list壓扁成一個List
scala> res13.flatten
res14: List[Int] = List(1, 7, 9, 8, 0, 3, 5, 4, 6, 2)
1.9 wordcount
scala> val lines = List("hello tom hello jerry", "hello jerry", "hello kitty")
lines: List[String] = List(hello tom hello jerry, hello jerry, hello kitty)
scala> val result = lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2))
result: scala.collection.immutable.Map[String,Int] = Map(tom -> 1, kitty -> 1, jerry -> 2, hello -> 4)
scala> val result = lines.flatMap(_.split(" ")).map((_,1)).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2)).toList.sortBy(_._2).reverse
result: List[(String, Int)] = List((hello,4), (jerry,2), (kitty,1), (tom,1))
1.10 平行計算求和
scala> lst0
res15: List[Int] = List(1, 7, 9, 8, 0, 3, 5, 4, 6, 2)
scala> lst0.par
res16: scala.collection.parallel.immutable.ParSeq[Int] = ParVector(1, 7, 9, 8, 0, 3, 5, 4, 6, 2)
scala> lst0.par.reduce(_+_)
res17: Int = 45
1.11 摺疊
scala> lst0.par.fold(0)(_+_)
res18: Int = 45
scala> lst0.par.fold(10)(_+_)
res19: Int = 135
1.12 聚合
scala> val arr = List(List(1, 2, 3), List(3, 4, 5), List(2), List(0))
arr: List[List[Int]] = List(List(1, 2, 3), List(3, 4, 5), List(2), List(0))
scala> arr.aggregate(0)(_+_.sum,_+_)
res20: Int = 20
1.13 並集
scala> val l1 = List(5,6,4,7)
l1: List[Int] = List(5, 6, 4, 7)
scala> val l2 = List(1,2,3,4)
l2: List[Int] = List(1, 2, 3, 4)
scala> l1.union(l2)
res21: List[Int] = List(5, 6, 4, 7, 1, 2, 3, 4)
scala> l1 union l2
res22: List[Int] = List(5, 6, 4, 7, 1, 2, 3, 4)
1.14 交集
scala> val r2 = l1.intersect(l2)
r2: List[Int] = List(4)
1.15 差集
scala> val r3 = l1.diff(l2)
r3: List[Int] = List(5, 6, 7)
2 map
和 foreach
scala> val arr = Array(1,2,3,4)
arr: Array[Int] = Array(1, 2, 3, 4)
scala> arr.map(println)
1
2
3
4
res9: Array[Unit] = Array((), (), (), ())
scala> arr.foreach(x => println(x))
1
2
3
4