概述
Problem
如何使用foreach方法来遍历一个集合中的所有元素
Solution
方法foreach使用函数作为参数。这个函数的定义应该使用一个集合元素作为输入参数,同时不应该有返回值。并且这个函数的输入参数类型必须是集合中的元素类型。当foreach方法运行的时候,它每次把一个元素从集合中取出作为参数传入到函数中,直到所有的元素都遍历完毕。
下面我们来看一个例子,一个通用的用来打印集合信息的例子:
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:Int
scala> x.foreach(i => println(i))
1
2
3
我们还有一种更为简洁的写法,这种方式用到了_这种通配符来替代一个临时变量i:
scala> x.foreach(println _)
1
2
3
在这种情况下,函数字面量包含一个带单个参数的声明,它可以写成更为简洁的形式:
scala> x.foreach(println)
1
2
3
对于一个像这样简历的例子,最后这样写法是最常用的
Discussion
只要你的函数只有一个参数,这个参数的类型是和集合元素类型一致的,并且函数没有任何返回值,那么你就可以调用foreach方法。接下来的例子中,printit方法接受一个char类型的参数,然后对它执行若干操作,同时没有返回值:
scala> def printIt(c:Char){println(c)}
printIt: (c: Char)Unit
scala> "HAL".foreach(printIt)
H
A
L
如果这个函数你只使用一次,那么就没有必要去声明它,直接使用函数字面量就行了
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")
}
最后
以上就是美丽大门为你收集整理的linux下foreach函数,第十章 Scala 容器基础(九):使用foreach来遍历一个集合的全部内容,希望文章能够帮你解决linux下foreach函数,第十章 Scala 容器基础(九):使用foreach来遍历一个集合所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复