匹配字符串
object Demo1 extends App{
private val arr = Array("Hello","ABC","word")
// 随机下标 数组的长度
private val name = arr(Random.nextInt(arr.length))
// 相当于switch
name match {
case "Hello" => println("Hello")
case "ABC" => println("ABC")
case "word" => println("word")
case _ => println("其他的")
}
}
匹配类型
object CaseDemo01 extends App{
val arr = Array("hello", 1, 2.0)
val v = arr(Random.nextInt(arr.length))
v match {
case x: Int => println("Int " + x)
case y: Double if(y >= 0) => println("Double "+ y)
case z: String => println("String " + z)
case _ => throw new Exception("not match exception")
}
}
匹配数组、元组、集合
object Demo3 extends App{
val arr = Array(1, 3, 5)
arr match {
case Array(1, x, y) => println(x + " " + y) //执行
case Array(0) => println("only 0")
case Array(0, _*) => println("0 ...")
case _ => println("something else")
}
val lst = List(3, -1)
lst match {
case 0 :: Nil => println("only 0")
case x :: y :: Nil => println(s"x: $x y: $y") //执行
case 0 :: tail => println("0 ...")
case _ => println("something else")
}
val tup = (1, 3, 7)
tup match {
case (1, x, y) => println(s"1, $x , $y") //执行
case (_, z, 5) => println(z)
case _ => println("else")
}
}
Option类型
在Scala中Option类型用样例类来表示可能存在或者可能不存在的值(Option的子类有Some和None)。Some包装了某个值,None表示没有值
object OptionDemo {
def main(args: Array[String]) {
val map = Map("a" -> 1, "b" -> 2)
val v = map.get("b") match {
case Some(i) => i
case None => 0
}
println(v) // 2
//更好的方式
val v1 = map.getOrElse("c", 0)
println(v1) // 0
}
}