Scala學習1.2 Scala中Array Map等資料結構實戰

土豆拍死馬鈴薯發表於2017-10-05
object Scala_study2 {
  def main(args: Array[String]): Unit = {
    /*
    1.2.1 定長陣列和可變陣列
      scala中陣列分為定長陣列和可變陣列.預設情況下是不可變(Immutable)陣列;
      若要定義可變陣列,需要顯式匯入包
     */
    val arrStr = Array("Scala","Spark")

    import scala.collection.mutable.ArrayBuffer
    val arrayBufferInt = ArrayBuffer[Int]()

    /*
    1.2.2 陣列常用演算法
    */

    arrStr(0) = "Storm" //使用()取下標

    arrStr.toBuffer //將不可變陣列轉換成可變陣列

    for(i <- 0 until arrStr.length)
      println(arrStr(i))  //遍歷

    for(elem <- arrStr)
      println(elem) //遍歷

    arrayBufferInt += 1 //可變陣列可以用+=在尾端新增元素

    arrayBufferInt += (2,3,4,5) // 可變陣列可以用+=在尾端新增多個元素


    arrayBufferInt ++= Array(6,7,8,9,10,11,12)  //可變陣列可以用++=在尾端新增任何集合

    arrayBufferInt.trimEnd(2) //除移最後的2個元素

    arrayBufferInt.remove(2)  //除移下標為2的元素

    arrayBufferInt.remove(2,4)  //除移從下標為2的元素開始的4個元素

    arrayBufferInt.toArray //將可變陣列轉為不可變陣列

    /*
    * 1.2.3 Map對映
    * 預設情況下scala使用不可變的對映,如果想使用可變集,必須明確匯入scala.collection.mutable.Map
    *
    * */
    val bigData = Map("Scala" -> 35, "Hadoop" -> 30, "Spark" -> 50)
    println(bigData("Scala"))//通過鍵,獲得值
    println(bigData.contains("Hadoop"))//是否包含給定的鍵
    println(bigData.getOrElse("Spark",70))//通過鍵獲得值,如果不包含給定鍵,則返回給定的值
    println(bigData.mkString(" { "," , "," } "))
    println(bigData.drop(2))

    //構造可變集合
    val bigDataVar = scala.collection.mutable.Map("Scala" -> 35, "Hadoop" -> 30, "Spark" -> 50)
    bigDataVar("Spark") = 100  //更新鍵值對,如果不存在則新增之
    bigDataVar += ("Kafka" -> 69) //使用+=新增
    bigDataVar += ("Kafka" -> 69) //使用-=刪除
    for( (k,v) <- bigDataVar)
      println(k + ":" + v)

    for(k <- bigDataVar.keySet)
      println(k)


    /*
    * 1.2.4 Tuple元組
    * 元組是()包住的資料集合,裡面可以存放不同型別
    * */
    val tuple1 = (1,"Hello")
    println(tuple1._1)  //列印第一個元素
    println(tuple1._2)  //列印第二個元素


    /*
    * 1.2.5 List(用連結串列實現)
    * */
    val fruit:List[String] = List("apples", "oranges", "pears")
    val nums:List[Int] = List(1,2,3,4)
    val empty:List[Nothing] = List()  //定義空list
    val dim:List[List[Int]] = List(
      List(1,0,0),List(0,1,0),List(0,0,1)
    ) //定義二維列表

    //列表定義的另一種方式
    //Nil代表空列表
    val fruit2 = "apples" :: ("oranges" :: ("pears" :: Nil))
    val nums2 = 1 :: (2 :: (3 :: (4 :: Nil)))
    val empty2 = Nil

    val dim2 = (1 :: (0 :: (0 :: Nil))) ::
      (0 :: (1 :: (0 :: Nil))) ::
      (0 :: (0 :: (1 :: Nil))) ::
      Nil


    fruit.head  //head方法去除第一個元素
    fruit.tail  //除了第一個值外的所有元素構成的列表
    fruit.isEmpty //判斷是否為空


    //:::或者List.:::或者List.concat串聯列表
    val fruit3 = "apples" :: ("oranges" :: ("pears" :: Nil))
    val fruit4 = "mangoes" :: ("banana" :: Nil)
    var fruit5 = fruit3 ::: fruit4
    fruit5 = fruit3.:::(fruit4)
    fruit5 = List.concat(fruit3,fruit4)

    /*
    * 1.2.6 Set
    * 
    * 
    * */
    var s : Set[Int] = Set()
    s = Set(1,3,5,7)
    
  }
}

相關文章