0

タプルに圧縮された方法を使用して、一時的な圧縮されたリストを参照しようとしました

それを次のようにします:

val l1 : List[Int] = List(1,2,3)
val l2 : List[Int] = List(2,3,1)
val l3 : List[Int] = for ( (a,b) <- (l1,l2).zipped ) yield a+b

合成例ですのでmap関数だけで代用できますが、もっと複雑な式で使いたいです。

それは私にエラーを与えます: パラメーターの数が間違っています。(l1,l2).zipped.map には 2 つの引数があるため、expected = 2は理にかなっています。理解のために内部で2引数マップ関数を翻訳する正しい方法は何ですか?

4

2 に答える 2

1
scala> val l1 : List[Int] = List(1,2,3)
l1: List[Int] = List(1, 2, 3)

scala> val l2 : List[Int] = List(2,3,1)
l2: List[Int] = List(2, 3, 1)

scala> val l3 : List[Int] = for ( (a,b) <- (l1,l2).zip) yield a+b    
l3: List[Int] = List(3, 5, 4)
于 2012-05-29T17:29:03.187 に答える
1

圧縮されたバージョンをforステートメントに変換することはできません。for

(l1,l2).zipped.map{ _ match { case (a,b) => a+b } }

andzippedのマップには、1 つではなく 2 つの引数が必要です。For は 2 つの引数を取るマップについては知りませんが、マッチの方法は知っています。タプルはまさに 2 つの引数を 1 つに変換するために必要なものであり、zip がそれらを作成します。

for ((a,b) <- (l1 zip l2)) yield a+b

繰り返しごとに余分なオブジェクトを作成するという犠牲を払って。多くの場合、これは問題になりません。その場合は、完全に書き留めたほうがよいでしょう。実際にはArray、少なくともプリミティブの機能が多い場合は、 を使用したほうがよいので、ボクシングを回避し、インデックスを使用して作業できます。

于 2012-05-29T17:53:37.290 に答える