簡體   English   中英

scala中的foreach循環

[英]foreach loop in scala

在scala foreach循環中,如果我有列表

val a = List("a","b","c","d")

我可以打印它們沒有像這樣的模式匹配

a.foreach(c => println(c))

但是,如果我有這樣的元組

val v = Vector((1,9), (2,8), (3,7), (4,6), (5,5))

我為什么要使用

v.foreach{ case(i,j) => println(i, j) }
  1. 模式匹配案例
  2. {括號

請解釋執行兩個foreach循環時會發生什么。

您沒有,您選擇。 問題是當前的Scala編譯器沒有解構元組,你可以這樣做:

v.foreach(tup => println(tup._1, tup._2))

但是,如果您希望能夠使用新的變量名稱引用它自己的每個元素,則必須使用具有模式匹配的部分函數,​​這可以解構元組。

這就是編譯器在你使用case時所做的事情:

def main(args: Array[String]): Unit = {
  val v: List[(Int, Int)] = scala.collection.immutable.List.apply[(Int, Int)](scala.Tuple2.apply[Int, Int](1, 2), scala.Tuple2.apply[Int, Int](2, 3));
  v.foreach[Unit](((x0$1: (Int, Int)) => x0$1 match {
    case (_1: Int, _2: Int)(Int, Int)((i @ _), (j @ _)) => scala.Predef.println(scala.Tuple2.apply[Int, Int](i, j))
  }))
}

您會看到它在未命名的x0$1上匹配模式,並將_1_2分別放在ij

根據http://alvinalexander.com/scala/iterating-scala-lists-foreach-for-comprehension

val names = Vector("Bob", "Fred", "Joe", "Julia", "Kim")

for (name <- names)
    println(name)

回答#2:你只能在大括號中使用case 關於牙箍的更完整答案就在這里

Vector的工作方式有點不同,你使用case使用函數文字...

在Scala中,我們使用括號{}來接受case ......

{
  case pattern1 => "xxx"
  case pattern2 => "yyy"
}

所以,在這種情況下,我們將它與foreach循環一起使用......

使用以下模式打印所有值:

val nums = Vector((1,9), (2,8), (3,7), (4,6), (5,5))

nums.foreach {
    case(key, value) => println(s"key: $key, value: $value")
}

你也可以檢查其他循環,比如for循環,如果你認為這不是你覺得舒服的東西......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM