※List、Set、Map 宣告
println(List(1, 1, 2, 2, null))println(Set(1, 1, 2, 2, null))
println(Map("a" -> 1, "b" -> null)) // key 不能 null,value 可以;但如果有宣告泛型都不能是 null
限定某個類型,類似 java 的泛型
val value:List[Int] = List(1, 1, 2, 2, null)
以上都是不可變的,預設都是 scala.collection.immutable,可變的在 scala.collection.mutable
Set 和 Map都有同名的類別,但 List 的可變類別是 ListBuffer
※List
var xxx = 1 :: (2 :: (3 :: Nil)) // List(1,2,3),最後一定要寫 Nilxxx.foreach(n => println(n))
println(xxx.head) // 1
println(xxx.tail) // List(2, 3), 返回第一個以外的元素
println(xxx.isEmpty) // false
var xxx = List(1, 2, 3)
var ooo = List(4, 5, 6)
var zzz = xxx.concat(ooo) // xxx ::: ooo
zzz.foreach(n => println(n)) // 1-6
※::: 等同於 concat
※可變的 List
import scala.collection.mutable.ListBufferval listBuffer = ListBuffer(1,2,3)
listBuffer += 4 // unit.addOne(4)
println(listBuffer)
※Set
import scala.collection.mutable.Setval mutableSet:Set[String] = Set("a", "b", "c")
println(mutableSet.getClass.getName) // scala.collection.mutable.HashSet
mutableSet.add("d") // a b c d
mutableSet.remove("b") // a c d
mutableSet += "e" // a c d e
mutableSet -= "a" // c d e
※這裡用的是可變的
※整合兩個集合 (List、Set 、Map 混合都可以)
val s1 = Set("a", "b", "c")val s2 = Set("d", "e")
val s3= s1 ++ s2
println(s3)
※最大值、最小值
val n = Set(78,44,88,115)println(n.min)
println(n.max)
※Map
import scala.collection.mutable.Mapval map: Map[String, Int] = Map("a" -> 1, "b" -> 2)
map += ("c" -> 88)
map.keys.foreach(k => println(k + "-" + map(k)))
※整合兩個集合(List、Set、Map 混合都可以)
val map1: Map[String, Int] = Map("a" -> 1, "b" -> 2)val map2: Map[String, Int] = Map("c" -> 3, "d" -> 4)
val map3 = map1 ++ map2
println(map3)
※Tuple
裡面可以放入不同類型,可以重複,但都是不可變的,可以回傳多個值 (1~22)也就是 List,但值可以是多種型態
val t = ("x", true, 3): Tuple3[String, Boolean, Int]
println(t._1) // x
println(t._2) // true
println(t._3) // 3
// 解構賦值
val (s, b, i) = t
println(s) // x
println(b)// true
println(i) // 3
※scala 內鍵從 Tuple1~Tuple22,數字表示參數數量
// 匹配
val list = List(("a", 1), ("b", 2), ("c", 3), ("d", 4))list.foreach(t => {
t match {
case ("a", v) => println("a=" + v)
case (k, 2) => println(k + "=2")
// case k if k._1 == "c" => println(s"${k._1}=${k._2}")
case k => if(k._1 == "c") println(s"${k._1}=${k._2}")
case _ => println(".............")
}
})
※如果匹配到多個會以第一個為主
※不用也不可寫 break 和 continue,只會判斷一個,但下面有個例外
※=> 前面還可以寫 if,再做一次判斷,圓括號可省略
※如果 if 寫在 => 前面,當沒有匹配到時,會再去 _ 的判斷式裡,如果沒有寫 _ 判斷式,會報 scala.MatchError;但 if 寫在 => 後面,沒判斷到就 continue 了
// for 迴圈
val list = List(("a", 1), ("b", 2), ("c", 3), ("d", 4))for ((x, y) <- list) {
println(x + y) // a1 b2 c3 d4
}
沒有留言:
張貼留言