0

私はflatMapスカラ配列に適用し、そこから別の配列を作成しています:

val x = sc.parallelize(Array(1,2,3,4,5,6,7))
val y = x.flatMap(n => Array(n,n*100,42))
println(y.collect().mkString(","))
1,100,42,2,200,42,3,300,42,4,400,42,5,500,42,6,600,42,7,700,42

しかし、次の方法でplaceholder "_"作成するコードの 2 行目で使用しようとしています。y

scala> val y = x.flatMap(Array(_,_*100,42))
<console>:26: error: wrong number of parameters; expected = 1
       val y = x.flatMap(Array(_,_*100,42))
                              ^  

これは機能していません。プレースホルダーを使用したい場合、そのような場合に何をすべきか誰かが説明できますか?

4

2 に答える 2

1

scala では、ラムダ内のプレースホルダーの数は、ラムダ パラメーターのカーディナリティを示します。

したがって、最後の行は次のように展開されます

val y = x.flatMap((x1, x2) => Array(x1, x2*100, 42))

簡単に言うと、プレースホルダーを使用して同じ要素を 2 回参照することはできません。

この場合、名前付きパラメーターを使用する必要があります。

val y = x.flatMap(x => Array(x, x*100, 42))
于 2015-08-17T17:59:48.273 に答える
0

_ プレースホルダーは、パラメーターごとに 1 回だけ使用できます。(あなたの場合、 flatMap メソッドは単一の引数を取りますが、あなたは言っています-ちょっとコンパイラ、動作しない2つの引数を期待してください)

val y = x.flatMap(i => Array(i._1, i._2*100,42))

トリックを行う必要があります。

val y = x.flatMap { case (i1, i2) => Array(i1, i2*100,42) }

も動作するはずです(そしておそらくより読みやすい)

于 2015-08-17T18:01:06.247 に答える