1. 程式人生 > >scala-for的基本應用

scala-for的基本應用

scala-for的應用:

直接上程式碼。

  def testfor01: Unit ={

    val nieces = List("emily", "hananh", "mercedes", "porsche")
    /*
    關鍵字yield:for迴圈中的yield會把當前的元素記錄下來,
                 儲存到集合中,迴圈結束後將返回該集合。
                 scala中for迴圈是有返回值的,如果被迴圈的是Map,則返回的就是Map,
                 如果被迴圈的是List,則返回的是List,以此類推

    scala遍歷集合的方式較多:for迴圈、foreach迴圈、while迴圈、map對映、flatmap等

    使用to或until進行for迴圈時,to與until區別:
        to:包含上下限,是閉區間
        until:不包含上下限,是開區間
     */
    for (n <- nieces) yield println(n.capitalize)
    /*
        for (n <- nieces)這種for推導式中,失敗的匹配則會被安靜的忽略
     */
    nieces.foreach(nie => println(nieces.mkString))


    //2、for迴圈可作為計時器
    println("------for as a timer------")
    val a = Array("apple", "banana", "orange")
    a.foreach(println)
    for (i <- 0 until a.length if i != 1) println(s"$i is ${a(i)}")


    //3、衛語句(for迴圈中if判斷),此處to 與until的功能一樣
    //衛語句通常作為篩選集合,根據具體要求,可使用集合中的filter、take、drop等方法替代for迴圈
    println("------ 在for迴圈中有if語句巢狀 ------")
    for (x <- 0 to 5 if x != 3) println(x)
    //在for迴圈中巢狀if語句,可以同時巢狀多個if語句
    for (wei_x <- 0 to 5 if wei_x % 2 == 0 if wei_x == 2) println(wei_x)


    System.out.println("------ 遍歷Map集合 ------")
    //遍歷Map集合
    val names = Map("fname" -> "Robert", "lname" -> "Goren")
    for ((k, v) <- names) println(s"key: $k, value: $v")
  }
  def testfor02: Unit ={

    val nieces = List("emily", "hananh", "mercedes", "porsche")

    //for推導:通過for-yield的應用for迴圈是有返回值的。
    val str01: List[String] = for (n <- nieces if !n.contains("emily")) yield  n+" ... dd"
    str01.foreach(println)

    //for推導:在yield中有多行程式碼時,使用在yield中使用程式碼塊
    val str02 = for (n <- nieces if ! n.contains("emily")) yield {
      val str = n+" ... dd"
      str
    }

    str02.foreach(println)

  }

  scala-for應用過程中注意for內的迴圈是開區間還是閉區間,若使用for-yield守衛,要注意yield的返回物件。