scala學習筆記(十二) 集合
阿新 • • 發佈:2018-12-25
Scala的集合分為三大分支序列集對映
1、所有集合都擴充套件自Iterable特質
2、幾乎所有的集合都分為可變與不可變版本
3、集(Set)不保證插入順序的
4、使用 +來新增元素, -來移除元素,+:新增到頭部,:+新增到尾部, ++用來將兩個集合拼接, --移除後面集合的所有元素
5、scala的集合中已經包含了很多內建的遍歷方法,一般來說在你需要寫迴圈來處理集合元素的時候,都應該先考慮集合自帶的這些
Scala中的集合分為可變集合與不可變集合,分別在 scala.collection.mutable包中和 scala.collection.immutable包中
Scala
Scala中有可以支援多執行緒並行執行的集合 ParSeq,ParSet, ParMap,但是有一個基本要求是執行的函式式不依賴元素順序的。
普通集合可以通過par方法轉成並行集合,如下是在多執行緒中執行的:
for (i <- (1 to 100).par) println(i +"")
println((1to 100000).par sum)
集合中很多內容並不好簡單的寫出來,下面是一些練習:
package demo import scala.collection.immutable.HashMap import scala.collection.mutable.ArrayBuffer import sun.org.mozilla.javascript.internal.ast.Yield /** * @author Administrator */ object ScalaIterable { def main(args: Array[String]): Unit = { // for (i <- (1 to 100).par) println(i + "") indexes("yangmingwei") foreach (println) val al = List(2, 3, 2, 0, 2, 5, 0) val al2 = removeZero(al) println(al) println(al2) val s = Array("Tom", "Fred", "Harry") val m = Map("Tom" -> 3, "Harry" -> 5) println(fun(s, m).mkString) println(mkString(1 to 10)) println((al :\ List[Int]())((n: Int, a: List[Int]) => a :+ n)) println((List[Int]() /: al)(_ :+ _)) grouped(Array(1, 2, 3, 4, 5, 6, 7, 8), 3) foreach { x => println(x.mkString("[", ",", "]")) } } def removeZero(arg: List[Int]) = { arg filter (_ != 0) } def grouped(arr: Array[Double], n: Int) = { // val tmp = ArrayBuffer[Array[Double]]() // var tmp2 = ArrayBuffer[Double]() // for (value <- arr) { // tmp2 += value // if (tmp2.length == n || (tmp.length * n + tmp2.length == arr.length)) { // tmp += tmp2.toArray // tmp2 = ArrayBuffer[Double]() // } // } // tmp.toArray val tb = arr.toBuffer tb.sliding(n,n).toArray } def fun(strArrays: Array[String], m: Map[String, Int]) = { strArrays flatMap { x => m.get(x) } } def mkString(seq: Seq[Any]) = { seq.reduceLeft(_ + "" + _) } def indexes(str: String) = { var mp = new HashMap[Char, ArrayBuffer[Int]] for (i <- (0 until str.length)) { if (mp.contains(str(i))) { mp(str(i)) += i } else { mp += (str(i) -> ArrayBuffer(i)) } } mp } }