私はしばらくこれに固執しています:私はこの方法を持っています
Method(a: (A,B)*): Unit
Map [A、B]タイプのマップがありますが、このマップを変換して引数として直接使用できるようにする方法はありますか?何かのようなもの:
Method(map.convert)
ありがとうございました。
私はしばらくこれに固執しています:私はこの方法を持っています
Method(a: (A,B)*): Unit
Map [A、B]タイプのマップがありますが、このマップを変換して引数として直接使用できるようにする方法はありますか?何かのようなもの:
Method(map.convert)
ありがとうございました。
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)
よくわかりませんが、マップをタプルの配列に変換してから、次のようにvararg型にキャストしてみてください。
Method(map.toArray: _*)
「.toSeq」を使用してマップをペアのシーケンスに変換し、「:_ *」で後置されたvar-argsメソッドに渡すだけです(これは、var-argsメソッドに引数としてシーケンスを渡すことができるScala構文です)。
例:
def m(a: (String, Int)*) { for ((k, v) <- a) println(k+"->"+v) }
val x= Map("a" -> 1, "b" -> 2)
m(x.toSeq:_*)
担当者:
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