Map
上的一些函数将一个键值元组的函数作为参数。例如。 def foreach(f: ((A, B)) ⇒ Unit): Unit
。所以我找了一个简短的方法来写一个foreach
的参数:
> val map = Map(1 -> 2, 3 -> 4)
map: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2, 3 -> 4)
> map.foreach((k, v) => println(k))
error: wrong number of parameters; expected = 1
map.foreach((k, v) => println(k))
^
> map.foreach({(k, v) => println(k)})
error: wrong number of parameters; expected = 1
map.foreach({(k, v) => println(k)})
^
> map.foreach(case (k, v) => println(k))
error: illegal start of simple expression
map.foreach(case (k, v) => println(k))
^
我能做到
> map.foreach(_ match {case (k, v) => println(k)})
1
3
有更好的选择吗?
答案 0 :(得分:46)
你与map.foreach(case (k, v) => println(k))
非常接近。要在匿名函数中使用case
,请用大括号括起来。
map foreach { case (k, v) => println(k) }
答案 1 :(得分:13)
在这种情况下,我经常使用for
语法。
for ((k,v) <- map) println(k)
根据“Scala编程”第23章,上面的for循环被转换为call foreach
。
答案 2 :(得分:5)
另一种选择是tupled
对象的Function
方法:
import Function.tupled;
// map tupled foreach {(k, v) => println(k)}
map foreach tupled {(k, v) => println(k)}
答案 3 :(得分:3)
您还可以按如下方式访问元组:
scala> val map = Map(1 -> 2, 3 -> 4)
map: scala.collection.immutable.Map[Int,Int] = Map((1,2), (3,4))
scala> map foreach (t => println(t._1))
1
3
答案 4 :(得分:2)
Welcome to Scala version 2.8.0.Beta1-prerelease (OpenJDK Server VM, Java 1.6.0_0).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val m = Map('a -> 'b, 'c -> 'd)
m: scala.collection.immutable.Map[Symbol,Symbol] = Map('a -> 'b, 'c -> 'd)
scala> m foreach { case(k, v) => println(k) }
'a
'c
答案 5 :(得分:1)
我最后的尝试非常接近,实际上是:
> map.foreach({case (k, v) => println(k)})
1
3