5

私は Scala 2.9 を使用しており、いくつかの操作に基づいてリストを作成したいと考えています。

以下を検討してください。2 つの単純なリストがあります。

    val l1 = リスト(2,3)
    val l2 = List(List(4,5,6),List(7,8,9))

私が望む動作は次のとおりです。次のように、両方のリストを使用した操作です。

    (2*4)+(3*7)
    (2*5)+(3*8)
    (2*6)+(3*9)

結果として、これらの値を持つ別のリストが必要です。

29,34,39

上記のソースコードで解決しようとしました。私はおそらくこれを完全に間違った方法で考えていますが、エレガントな解決策を考え出すのに苦労しています.

    val lr = (l1,l2).zipped.map( (t1:Int, t2:List[Int]) =>
        ...
    )    
    println (lr) // List(29, 34, 39) を出力する必要があります

しかし、自分のやり方が正しいのか、どのように継続すればよいのかさえわかりません。私の問題に対するエレガントな解決策を考えられる人はいますか?

4

1 に答える 1

12

考えられる方法の 1 つを次に示しますが、エレガントかどうかはわかりません。

l2.transpose.map(sl => (l1, sl).zipped.map{ case(x,y) => x*y }.sum)
res: List[Int] = List(29, 34, 39)

@Tharabas と @michael_s のコメントによると、最終的によりコンパクトなソリューションが得られました。

l2.transpose.map((l1,_).zipped.map(_*_).sum)
于 2013-03-22T14:23:17.920 に答える