如何使用foreach方法來遍歷一個集合中的全部元素
函數
方法foreach使用函數做爲參數。這個函數的定義應該使用一個集合元素做爲輸入參數,同時不該該有返回值。而且這個函數的輸入參數類型必須是集合中的元素類型。當foreach方法運行的時候,它每次把一個元素從集合中取出做爲參數傳入到函數中,直到全部的元素都遍歷完畢。
scala
下面咱們來看一個例子,一個通用的用來打印集合信息的例子:code
scala> val x = Vector(1,2,3) x: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3) scala> x.foreach((i:Int) => println(i)) 1 2 3
這種一種函數定義的普通寫法,但其實Scala能夠推斷出i的類型爲Int,因此沒有必要寫出i:Intit
scala> x.foreach(i => println(i)) 1 2 3
咱們還有一種更爲簡潔的寫法,這種方式用到了_這種通配符來替代一個臨時變量i:io
scala> x.foreach(println _) 1 2 3
在這種狀況下,函數字面量包含一個帶單個參數的聲明,它能夠寫成更爲簡潔的形式:table
scala> x.foreach(println) 1 2 3
對於一個像這樣簡歷的例子,最後這樣寫法是最經常使用的
class
只要你的函數只有一個參數,這個參數的類型是和集合元素類型一致的,而且函數沒有任何返回值,那麼你就能夠調用foreach方法。接下來的例子中,printit方法接受一個char類型的參數,而後對它執行若干操做,同時沒有返回值:變量
scala> def printIt(c:Char){println(c)} printIt: (c: Char)Unit scala> "HAL".foreach(printIt) H A L
若是這個函數你只使用一次,那麼就沒有必要去聲明它,直接使用函數字面量就好了foreach
scala> "HAL".foreach((c:Char) => println(c)) H A L
除了能夠用於有序集合外,foreach還能夠用於Map類,當使用時函數的入參是一個二元祖(key,value):遍歷
scala> val m = Map(1->"a",2->"b",3->"c") m: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b, 3 -> c) scala> m.foreach(x => println(x._1 + "->" + x._2)) 1->a 2->b 3->c
一般狀況下,使用下面的寫法更能表達出程序的含義:
movieRatings.foreach { case(movie, rating) => println(s"key: $movie, value: $rating") }