使用map元素作为方法参数

时间:2012-11-11 13:16:55

标签: scala

我已经坚持了一段时间了:我有这个方法

Method(a: (A,B)*): Unit

我有一个Map [A​​,B]类型的地图,有没有办法转换这个地图,以便我可以直接用它作为参数? 类似的东西:

Method(map.convert)

谢谢。

3 个答案:

答案 0 :(得分:9)

您可以使用Map.toSeq构建一系列配对。

您还可以通过Seq[T]“投射”来将: _*类型的序列作为varargs传递。

将转化链接起来以达到您想要的效果:

scala> val m = Map('a' -> 1, 'b' -> 2, 'z' -> 26)
m: scala.collection.immutable.Map[Char,Int] = Map(a -> 1, b -> 2, z -> 26)

scala> def foo[A,B](pairs : (A,B)*) = pairs.foreach(println)
foo: [A, B](pairs: (A, B)*)Unit

scala> foo(m.toSeq : _*)
(a,1)
(b,2)
(z,26)

答案 1 :(得分:1)

我不确定但您可以尝试将地图转换为元组数组,然后将其转换为vararg类型,如下所示:

Method(map.toArray: _*)

答案 2 :(得分:0)

使用“.toSeq”将地图转换为一系列对,并将其传递给后缀为“:_ *”的var-args方法(这是Scala语法,允许将序列作为参数传递给var-args法)。

示例:

def m(a: (String, Int)*) { for ((k, v) <- a) println(k+"->"+v) }
val x= Map("a" -> 1, "b" -> 2)
m(x.toSeq:_*)

在repl中:

scala>   def m(a: (String, Int)*) { for ((k, v) <- a) println(k+"->"+v) }
m: (a: (String, Int)*)Unit

scala>   val x= Map("a" -> 1, "b" -> 2)
x: scala.collection.immutable.Map[java.lang.String,Int] = Map(a -> 1, b -> 2)

scala>   m(x.toSeq:_*)
a->1
b->2