開發與維運

Scala語言入門三(集合)

一、數組

Scala 語言中提供的數組是用來存儲固定大小的同類型元素,數組對於每一門編輯應語言來說都是重要的數據結構之一。數組的第一個元素索引為0,最後一個元素的索引為元素總數減1

1、聲明數組

  • 不可變數組
/**
 * @author Gjing
 **/
object ArrayApp {

  def main(args: Array[String]): Unit = {
    // 聲明一個長度為2的不可變數組
    val arr = new Array[String](2)
    // 賦值
    arr(0) = "java"
    arr(1) = "scala"

    // 使用另外一種方式聲明數組
    val arr2 = Array("java","scala")
  }
}
  • 不可變數組
/**
 * @author Gjing
 **/
object ArrayApp {

  def main(args: Array[String]): Unit = {
    val buffer = ArrayBuffer[String]()
    // 追加一個值
    buffer += "java"
    // 追加一個數組
    buffer ++= Array("scala", "vue")
  }
}

2、數組的處理

列出常見的一些操作,其餘的自行查閱文檔

  • 循環輸出
/**
 * @author Gjing
 **/
object ArrayApp {

  def main(args: Array[String]): Unit = {
    val arr = Array("java", "scala")
    for (x <- arr) {
      println(x)
    }
  }
}
  • 合併數組
/**
 * @author Gjing
 **/
object ArrayApp {

  def main(args: Array[String]): Unit = {
    val arr = Array("java", "scala")
    val arr2 = Array("vue", "go")
    // 這種方式需要引入 import Array._
    val arr3 = concat(arr, arr2)
    // 直接調用
    val arr4 = arr.concat(arr2)
  }
}

二、List

List的特徵是其元素以線性方式存儲,集合中可以存放重複對象。

1、創建List

  • 定長list
/**
 * @author Gjing
 **/
object ListApp {

  def main(args: Array[String]): Unit = {
    // 數字列表
    var l1 = List(1, 2, 3, 4)
    var l2 = 1 :: 2 :: 3 :: Nil
    // 生成空列表
    var l3 = Nil
  }
}

構造列表的兩個基本單位是 Nil 和 ::

Nil 也可以表示為一個空列表。

  • 不定長
/**
 * @author Gjing
 **/
object ListApp {

  def main(args: Array[String]): Unit = {
    val l = ListBuffer[Int]()
    // 加一個元素
    l += 2
    // 加入多個元素
    l += (3,4)
    // 加入一個集合
    l ++= List(5,6)
    // 打印 2,3,4,5,6
    println(l.mkString(","))
  }
}

2、列表的操作

  • 基本操作(返回第一個元素、返回第一個元素以外的列表、判斷列表是否為空)
/**
 * @author Gjing
 **/
object ListApp {

  def main(args: Array[String]): Unit = {
    var l = List(1,2,3)
    // 打印 1
    println(l.head)
    // 打印 List(2,3)
    println(l.tail)
    // 打印false
    println(l.isEmpty)
  }
}
  • 拼接
/**
 * @author Gjing
 **/
object ListApp {

  def main(args: Array[String]): Unit = {
    val l1 = List(1, 2, 3)
    val l2 = List(3,4)
    val l3 = l1 ::: l2
    // 較第一種是後者加進去後再列表前面
    val l4 = l1.:::(l2)
    val l5 = List.concat(l1,l2)
    println(l3.mkString(","))
    println(l4.mkString(","))
    println(l5.mkString(","))
  }
}
  • 列表反轉
/**
 * @author Gjing
 **/
object ListApp {

  def main(args: Array[String]): Unit = {
    val l1 = List(1, 2, 3)
    // 打印 3,2,1
    println(l1.reverse.mkString(","))
  }
}
  • 創建一個指定重複數量的元素列表
/**
 * @author Gjing
 **/
object ListApp {

  def main(args: Array[String]): Unit = {
    val l1 = List.fill(2)(1)
    // 打印 1,1
    println(l1.mkString(","))
  }
}

三、Set

Set是最簡單的一種集合。集合中的對象不按特定的方式排序,並且沒有重複對象, 用法和list差不多,這裡不過多介紹

四、Map

Map 是一種把鍵對象和值對象映射的集合,它的每一個元素都包含一對鍵對象和值對象。Map 有兩種類型,可變與不可變,區別在於可變對象可以修改它,而不可變對象不可以。默認情況下 Scala 使用不可變 Map。如果你需要使用可變集合,你需要顯式的引入
import scala.collection.mutable.Map 類在 Scala 中 你可以同時使用可變與不可變 Map,不可變的直接使用 Map,可變的使用 mutable.Map

1、創建Map

/**
 * @author Gjing
 **/
object MapApp {
  def main(args: Array[String]): Unit = {
    // 空map
    val m1 = Map()
    // 存在鍵值對
    var m2 = Map("名字" -> "張三", "年齡" -> 12)
    println(m2.mkString(","))
    // 加一個新的鍵值對進去
    m2 += ("性別" -> "男")
    println(m2.mkString(","))
  }
}

2、基本操作

/**
 * @author Gjing
 **/
object MapApp {
  def main(args: Array[String]): Unit = {
    var m2 = Map("名字" -> "張三", "年齡" -> 12)
    // 返回所有key
    println(m2.keys)
    // 返回所有value
    println(m2.values)
    // 判斷是否為空
    println(m2.isEmpty)
  }
}

3、合併

你可以使用 ++ 運算符或 Map.++() 方法來連接兩個 Map,Map 合併時會移除重複的 key

/**
 * @author Gjing
 **/
object MapApp {
  def main(args: Array[String]): Unit = {
    val map1 = Map("年齡" -> "12")
    val map2 = Map("性別" -> "男")
    println(map1 ++ map2)
    println(map1.++(map2))
  }
}

4、查看 Map 中是否存在指定的 Key

object MapApp {
  def main(args: Array[String]): Unit = {
    var m1 = Map("名字" -> "張三", "年齡" -> 12)
    // 打印 true
    println(m1.contains("名字"))
  }
}

四、元組

元組是不同類型的值的集合,與列表一樣,元組也是不可變的,但與列表不同的是元組可以包含不同類型的元素

1、定義元組

/**
 * @author Gjing
 **/
object TupleApp {
  def main(args: Array[String]): Unit = {
    val t1 = (1, "呢", 1.1)
    val t2 = new Tuple3(1, "呢", 1.1)
  }
}

元組的實際類型取決於它的元素的類型,比如 (99, "runoob") 是 Tuple2[Int, String], 目前 Scala 支持的元組最大長度為 22。對於更大長度你可以使用集合,或者擴展元組

2、訪問元組

/**
 * @author Gjing
 **/
object TupleApp {
  def main(args: Array[String]): Unit = {
    val t1 = (1, "呢", 1.1)
    // 獲取元組第一個內容
    println(t1._1)
    // 獲取元組第二個內容
    println(t1._2)
  }
}

3、元組的迭代

/**
 * @author Gjing
 **/
object TupleApp {
  def main(args: Array[String]): Unit = {
    val t1 = (1, "呢", 1.1)
    t1.productIterator.foreach(e => println(e))
  }
}

4、元組轉字符串

/**
 * @author Gjing
 **/
object TupleApp {
  def main(args: Array[String]): Unit = {
    val t1 = (1, "呢", 1.1)
    println(t1.toString())
  }
}

Leave a Reply

Your email address will not be published. Required fields are marked *