Scala Collection筆記

1、數組

    // 創建數組
    // **** 方式1 ****
    val array = Array[String]("a", "b", "c")
    // **** 方式2 ****
    // (1) 創建類型爲String 長度爲3的數組
    val array1 = new Array[String](3)
    // (2) 賦值
    array1(0) = "a"
    array1(1) = "s"
    array1(2) = "d"
  • 同Java數組,數組包含的元素數據類型相同
  • scala 數組取值用的是() java用的是[]

遍歷數組

    // 遍歷數組
    // 1
    for (x <- array) {
      println(x)
    }
    // 2
    array1.foreach(x => {
      println(x)
    })
    // 3
    for (i <- 0 to (array.length - 1)) {
      println(array(i))
    }

2、List

 // 字符串列表
    val list: List[String] = List("百度", "騰訊", "阿里")
    // 二維列表
    val dim: List[List[Int]] =
      List(
        List(1, 0, 0),
        List(0, 1, 0),
        List(0, 0, 1)
      )
    // 1
    for (x <- list) {
      println(x)
    }
    

3、Set

    // 創建
    val set1 = Set(1,2,3,4,4)
    val set2 = Set(1,2,5)
    // 注意:set會自動去重
    set1.foreach(println)
    println("====")
    for(s <- set1) {
      println(s)
    }

4、Map

    // 創建
    var map = Map("1" -> "a", 2 -> "b", (3, "c"))
    // 添加 鍵值對
    map += ("k1" -> "V1")
    map += ("k2" -> "V2")

    // 取值
    println(map.get("1"))
    println(map.get("1").get)
    println(map.get("6").getOrElse("no value"))

    println("map 中的鍵爲 : " + map.keys)
    println("map 中的值爲 : " + map.values)
    println("檢測 map 是否爲空 : " + map.isEmpty)

    // map 遍歷
    for (x <- map) {
      println(x) // x 是一個元組
      println("key: " + x._1 + "\tvalue: " + x._2)
    }

    map.foreach(x => {
      println("key: " + x._1 + "\tvalue: " + x._2)
    })

    map.keys.foreach(key => {
      println("key:" + key + ", value:" + map.get(key).get)
    })

 

  • map中的每一個元素都是一個二元組
  • 如果需要添加 key-value 對,可以使用 + 號
  • 基本操作:keys、values、isEmpty
  • 可以使用 ++ 運算符或 Map.++() 方法來連接兩個 Map,Map 合併時會移除重複的 key。
    • ++例:map1.++(map2) map1中加入map2
    • ++:例:map1.++:(map2) map2中加入map1
  • 常用方法:https://www.runoob.com/scala/scala-maps.html
    • filter:過濾,留下符合條件的記錄
    • count:統計符合條件的記錄數
    • contains:map中是否包含某個key
    • exist:符合條件的記錄存在不存在

5、元組

// 創建元組
    val t = (1, 3.14, "Fred")
    val t1 = new Tuple4(2, 4.14, "Fred1", "fff")
    val t2 = Tuple4(2, 4.14, "Fred2", "dddd")
    val t22 = new Tuple22(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22)

    val sum = t22._1 + t22._2 + t22._3 + t22._10
    println("元素之和爲: " + sum)

    // 迭代元組
    t2.productIterator.foreach(i => {
      println("Value = " + i)
    })

    // 元組轉爲String
    println("連接後的字符串爲: " + t.toString() )
  • 與列表一樣,元組不可變,但與列表不同在於,元組可以包含不同類型的元素。
  • 元組的值通常是通過單個的值包含在圓括號中構成的
  • 元組的實際類型取決於它的元素的類型
  • 目前Scala支持的元組最大長度爲22.對於更大長度可以使用集合,或者擴展元組。
  • "._xx" 獲取元祖中的值
  • Tuple.productIterator() 方法來迭代輸出元組的所有元素

6、Option(選項)

Scala Option(選項)類型用來表示一個值是可選的(有值或無值)。

Option[T] 是一個類型爲 T 的可選值的容器:

  • 如果值存在, Option[T] 就是一個 Some[T]
  • 如果不存在, Option[T] 就是對象 None
val myMap: Map[String, String] = Map("key1" -> "value")
val value1: Option[String] = myMap.get("key1")
val value2: Option[String] = myMap.get("key2")
 
println(value1) // Some("value")
println(value2) // None

在上面的代碼中,myMap 一個是一個 Key 的類型是 String,Value 的類型是 String 的 hash map,但不一樣的是他的 get() 返回的是一個叫 Option[String] 的類別。

Scala 使用 Option[String] 來告訴你:「我會想辦法回傳一個 String,但也可能沒有 String 給你」。

myMap 裏並沒有 key2 這筆數據,get() 方法返回 None。

Option 有兩個子類別,一個是 Some,一個是 None,當他回傳 Some 的時候,代表這個函式成功地給了你一個 String,而你可以透過 get() 這個函式拿到那個 String,如果他返回的是 None,則代表沒有字符串可以給你。

常用方法:https://www.runoob.com/scala/scala-options.html

  • isEmpty()
  • getOrElse()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章